如何生成填充了特定区域的国家地图
How to generate a country map with specific regions filled in
我正在尝试创建一个填充了特定区域的国家/地区地图。我想将国家/地区分为 3 类:极端、高、太高。所以在每个类别中都会有一些地区(DEPARTAMEN)。每个类别都应该有特定的颜色(黑色、红色、橙色)。例如,在极端类别中,将有 8 个区域(DEPARTAMEN)具有相同的颜色(黑色)。
第一个答案正是我想要的,但我不能这样做,因为在这种情况下我不能使用 rworldmap 包:How to create a world map in R with specific countries filled in?。在第一个答案中,他们使用 rworldmap 函数来连接地图,并按类别填充区域。
这是我的数据的样子(shp 文件):
Simple feature collection with 6 features and 4 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -79.45845 ymin: -17.28501 xmax: -70.80408 ymax: -2.986125
geographic CRS: WGS 84
IDDPTO DEPARTAMEN CAPITAL FUENTE geometry
1 01 AMAZONAS CHACHAPOYAS INEI MULTIPOLYGON (((-77.81211 -...
2 02 ANCASH HUARAZ INEI MULTIPOLYGON (((-77.64692 -...
3 03 APURIMAC ABANCAY INEI MULTIPOLYGON (((-73.74632 -...
4 04 AREQUIPA AREQUIPA INEI MULTIPOLYGON (((-71.98109 -...
5 05 AYACUCHO AYACUCHO INEI MULTIPOLYGON (((-74.34843 -...
6 06 CAJAMARCA CAJAMARCA INEI MULTIPOLYGON (((-78.70034 -...
有没有办法做到与这个问题 (How to create a world map in R with specific countries filled in?) 中选择的答案相同但不使用 rworldmap 包?我也在使用 ggplot 包来绘制地图。
这是我想要的输出:
您可以将数据框(即 left_join()
)与您需要的类别合并到您的 sf 对象中。
由于我没有你的 shapefile,我在 raster::getData()
.
的帮助下得到了一个类似的文件
我手动创建了一个名为“example_data”的数据框,根据您的要求,Lima、Ancash 和 Amazonas 具有“极端”值,并随机分配“非常高”或“高”给其余部门。
library(tidyverse)
library(sf)
library(raster)
sf_peru <- raster::getData("GADM", country ="PE", level =1) %>% sf::st_as_sf()
example_data <- tibble(
departamentos = sf_peru$NAME_1,
risk = sample(x = c('very high', 'high'),
size = length(sf_peru$NAME_1),
replace = TRUE )) %>%
mutate(risk = if_else(departamentos %in% c("Lima", "Amazonas", "Ancash"), true = "extreme", false = risk))
sf_peru_joined <- sf_peru %>% left_join(example_data, by = c("NAME_1" = "departamentos"))
custom_colour_scale <- c("extreme" = "red", "very high" = "orange", "high" = "yellow")
ggplot() +
geom_sf(data = sf_peru_joined,
aes(fill = risk)) +
scale_fill_manual(values = custom_colour_scale,
limits = c("extreme", "very high", "high"))
我正在尝试创建一个填充了特定区域的国家/地区地图。我想将国家/地区分为 3 类:极端、高、太高。所以在每个类别中都会有一些地区(DEPARTAMEN)。每个类别都应该有特定的颜色(黑色、红色、橙色)。例如,在极端类别中,将有 8 个区域(DEPARTAMEN)具有相同的颜色(黑色)。
第一个答案正是我想要的,但我不能这样做,因为在这种情况下我不能使用 rworldmap 包:How to create a world map in R with specific countries filled in?。在第一个答案中,他们使用 rworldmap 函数来连接地图,并按类别填充区域。
这是我的数据的样子(shp 文件):
Simple feature collection with 6 features and 4 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: -79.45845 ymin: -17.28501 xmax: -70.80408 ymax: -2.986125
geographic CRS: WGS 84
IDDPTO DEPARTAMEN CAPITAL FUENTE geometry
1 01 AMAZONAS CHACHAPOYAS INEI MULTIPOLYGON (((-77.81211 -...
2 02 ANCASH HUARAZ INEI MULTIPOLYGON (((-77.64692 -...
3 03 APURIMAC ABANCAY INEI MULTIPOLYGON (((-73.74632 -...
4 04 AREQUIPA AREQUIPA INEI MULTIPOLYGON (((-71.98109 -...
5 05 AYACUCHO AYACUCHO INEI MULTIPOLYGON (((-74.34843 -...
6 06 CAJAMARCA CAJAMARCA INEI MULTIPOLYGON (((-78.70034 -...
有没有办法做到与这个问题 (How to create a world map in R with specific countries filled in?) 中选择的答案相同但不使用 rworldmap 包?我也在使用 ggplot 包来绘制地图。
这是我想要的输出:
您可以将数据框(即 left_join()
)与您需要的类别合并到您的 sf 对象中。
由于我没有你的 shapefile,我在 raster::getData()
.
我手动创建了一个名为“example_data”的数据框,根据您的要求,Lima、Ancash 和 Amazonas 具有“极端”值,并随机分配“非常高”或“高”给其余部门。
library(tidyverse)
library(sf)
library(raster)
sf_peru <- raster::getData("GADM", country ="PE", level =1) %>% sf::st_as_sf()
example_data <- tibble(
departamentos = sf_peru$NAME_1,
risk = sample(x = c('very high', 'high'),
size = length(sf_peru$NAME_1),
replace = TRUE )) %>%
mutate(risk = if_else(departamentos %in% c("Lima", "Amazonas", "Ancash"), true = "extreme", false = risk))
sf_peru_joined <- sf_peru %>% left_join(example_data, by = c("NAME_1" = "departamentos"))
custom_colour_scale <- c("extreme" = "red", "very high" = "orange", "high" = "yellow")
ggplot() +
geom_sf(data = sf_peru_joined,
aes(fill = risk)) +
scale_fill_manual(values = custom_colour_scale,
limits = c("extreme", "very high", "high"))