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

如何在rworldmap中自定义区域绘制聚合国家数据?

实现自定义区域的世界地图绘制

当然可以实现自定义区域的绘制!其实不用额外找其他包,rworldmap本身就能配合你自己的区域定义完成需求,甚至结合ggplot2还能做出更灵活的可视化效果。下面给你两种实用的实现方案:

方法一:直接用rworldmap配合自定义区域数据

这种方法适合想继续用rworldmap原生绘图函数的场景,步骤很清晰:

  1. 准备你的数据
    确保你的数据框包含三个核心部分:iso3国家代码列、自定义区域列(比如命名为custom_region,用来标记每个国家所属的自定义分组,如"欧盟"、"高收入国家"),以及你要展示的数值列(比如value)。

    模拟数据示例:

    library(rworldmap)
    library(dplyr)
    
    # 模拟你的数据结构
    my_data <- data.frame(
      iso3 = c("FRA", "DEU", "GBR", "USA", "JPN", "BRA", "IND"),
      custom_region = c("欧盟", "欧盟", "欧盟", "高收入国家", "高收入国家", "新兴市场", "新兴市场"),
      value = c(100, 150, 120, 200, 180, 90, 80)
    )
    
  2. 匹配地图与自定义数据
    用joinCountryData2Map函数把你的数据和rworldmap内置的地图数据通过iso3代码关联起来:

    map_merged <- joinCountryData2Map(my_data, 
                                      joinCode = "ISO3", 
                                      nameJoinColumn = "iso3")
    
  3. 按自定义区域绘图
    直接调用mapCountryData,指定用你的自定义区域列来着色:

    mapCountryData(map_merged,
                   nameColumnToPlot = "custom_region",
                   catMethod = "categorical",  # 因为是分类区域,用分类着色
                   mapTitle = "自定义区域世界地图",
                   colourPalette = "Set3",
                   borderCol = "white")  # 加上白色边框区分国家
    

    如果需要先对自定义区域做数据聚合(比如计算每个区域的总和),可以先用dplyr分组汇总:

    aggregated_region <- my_data %>%
      group_by(custom_region) %>%
      summarise(total_value = sum(value))
    
    # 聚合后如果要和地图匹配,只需要确保每个国家的区域标签正确,绘图时按区域聚合着色即可
    

方法二:用ggplot2 + rworldmap实现更灵活的可视化

如果你想要更自由的样式调整,ggplot2是更好的选择,配合rworldmap的地图数据同样能轻松实现:

  1. 转换地图数据格式
    把rworldmap的地图数据转换为ggplot支持的数据框格式:

    library(ggplot2)
    
    # 获取低分辨率世界地图(需要高分辨率可以改resolution为"high")
    world_map <- getMap(resolution = "low")
    world_df <- fortify(world_map, region = "ISO3")  # 按iso3代码拆分地图数据
    
  2. 合并自定义数据与地图
    用left_join通过iso3代码关联你的数据和地图数据:

    merged_df <- left_join(world_df, my_data, by = c("id" = "iso3"))
    
  3. 绘制自定义区域地图
    用ggplot的多边形图层绘制,按自定义区域着色:

    ggplot(merged_df, aes(x = long, y = lat, group = group, fill = custom_region)) +
      geom_polygon(color = "white", linewidth = 0.2) +  # 白色边框区分国家
      theme_void() +  # 去掉多余的坐标轴和背景
      scale_fill_brewer(palette = "Set3", na.value = "lightgray") +  # 给未匹配的国家设浅灰色
      labs(title = "自定义区域世界地图(ggplot2版)",
           fill = "自定义区域") +
      theme(plot.title = element_text(hjust = 0.5))  # 标题居中
    

额外说明

  • 不管用哪种方法,核心都是确保你的自定义区域数据和地图数据通过iso3代码正确匹配,所以只要你能给每个国家的iso3代码分配对应的自定义区域标签(不管是手动赋值还是从外部文件读取),就能轻松实现需求。
  • 如果需要更精细的地图数据,也可以用rnaturalearth包的ne_countries()函数获取,流程和上面完全一致,只需要把地图数据源替换即可。

内容的提问来源于stack exchange,提问作者user1778351

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:55