You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:25:38