如何将自定义SuPDem数据集通过ggplot2可视化到地图上?
用自定义SuPDem数据集绘制世界地图
你的数据集仅包含属性数据(无地理几何信息),无法直接用geom_sf绘图,需先将其与带地理信息的空间数据集合并,具体步骤如下:
1. 加载必要工具包
library(ggplot2) library(sf) # 若使用rnaturalearth获取空间数据,需先安装并加载: # install.packages("rnaturalearth") # library(rnaturalearth)
2. 准备空间地图数据
你可以沿用原代码中的world数据集(它本身是sf格式的空间数据),也可以通过rnaturalearth获取更完整的世界地图:
# 方式1:使用原代码的world数据集(需确保已加载) # 方式2:从rnaturalearth获取标准空间数据 world_sf <- ne_countries(returnclass = "sf")
3. 处理SuPDem数据集
你的数据是时间序列格式,先筛选单一年份数据(以2003年为例),避免国家记录重复:
# 假设你的数据集名为supdem_data supdem_2003 <- supdem_data %>% filter(Year == 2003) %>% select(ISO3c, SupDem) # 仅保留关联和绘图所需字段
4. 合并空间数据与属性数据
通过ISO3编码关联两个数据集:
# 若用原world数据集,其ISO3字段为iso_a3 map_data <- world %>% left_join(supdem_2003, by = c("iso_a3" = "ISO3c")) # 若用rnaturalearth的world_sf,关联字段同样为iso_a3 # map_data <- world_sf %>% # left_join(supdem_2003, by = c("iso_a3" = "ISO3c"))
5. 绘制地图
修改原代码,使用合并后的数据集,将填充映射设置为SupDem:
ggplot(data = map_data) + geom_sf(aes(fill = SupDem)) + scale_fill_viridis_c(option = "plasma", trans = "sqrt", na.value = "gray80") # 给无数据的国家设置灰色填充 labs(title = "2003年各国SuPDem水平", fill = "SuPDem")
补充:绘制多年份分面图
若要展示不同年份的SuPDem变化,可保留全量数据并使用分面:
# 合并所有年份的数据 map_data_all <- world %>% left_join(supdem_data, by = c("iso_a3" = "ISO3c")) ggplot(data = map_data_all) + geom_sf(aes(fill = SupDem)) + scale_fill_viridis_c(option = "plasma", trans = "sqrt", na.value = "gray80") + facet_wrap(~Year) + labs(title = "1998-2003年各国SuPDem水平变化", fill = "SuPDem") + theme_minimal()
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

