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

如何使用WorldMapR(或类似工具包)绘制按国家划分的H5N1病例患病率热力图

如何使用WorldMapR(或类似工具包)绘制按国家划分的H5N1病例患病率热力图

嘿,看起来你在尝试用WorldMapR的worldplot函数制作H5N1病例的国家热力图,我来帮你排查下现存问题,再给你梳理清晰的实现步骤~

首先排查你的数据和代码里的核心问题

  1. 国家编码与名称不匹配
    我注意到你数据里的iso_a2和Country列对应关系有错误!比如第一个条目:iso_a2是"AF"(对应阿富汗Afghanistan),但Country写的是"Azerbaijan"(阿塞拜疆,正确二字码是"AZ")。这种不匹配会导致地图完全无法正确关联国家,是必须先修正的问题——你要确保每一行的iso_a2都和对应的国家名称严格对应,可以查ISO 3166-1二位码表来核对。

  2. 缺少关键的病例数值列
    你的数据结构里只有iso_a2和Country两列,但worldplot函数的ColName参数指定的是"Cases"——也就是说函数需要一个存储病例数的数值列来生成热力颜色,你现在的数据集里根本没有这个列,必须补上包含H5N1病例数的Cases列才行。

修正后的WorldMapR实现步骤

1. 先搞定数据修正

先把国家编码和名称对应正确,再补上Cases列,比如修正后的示例数据大概是这样:

# 修正后的数据集(示例)
Underlag_heatmap <- structure(list(
  iso_a2 = c("AZ", "BD", "KH", "CA", "CL", "CN", "DJ", "EC", "EG", "IN", "ID", "IQ", "LA", "MM", "NP", "NG", "PK", "ES", "TH", "TR", "GB", "US", "VN"),
  Country = c("Azerbaijan", "Bangladesh", "Cambodia", "Canada", "Chile", "China", "Djibouti", "Ecuador", "Egypt", "India", "Indonesia", "Iraq", "Lao People's Democratic Republic", "Myanmar", "Nepal", "Nigeria", "Pakistan", "Spain", "Thailand", "Turkey", "United Kingdom", "United States", "Viet Nam"),
  Cases = c(5, 12, 8, 3, 1, 20, 2, 1, 45, 7, 18, 1, 3, 5, 4, 6, 9, 2, 10, 3, 4, 8, 15) # 这里替换成你的实际病例数
), class = "data.frame", row.names = c(NA, -23L))

2. 安装加载WorldMapR

如果你还没装这个包,先安装加载:

install.packages("WorldMapR")
library(WorldMapR)

3. 调整参数后运行worldplot

我给你调整了几个参数让热力图更合理:

worldplot(
  data = Underlag_heatmap,
  div = 5, # 把颜色分成5个梯度,比div=1的单色渐变更易区分
  ColName = "Cases",
  CountryName = "iso_a2",
  CountryNameType = "isoa2",
  rangeVal = c(0, 50), # 这个范围要和你的实际病例数最大值匹配,我用示例数据的45设到50
  title = "H5N1病例数国家热力图" # 加上标题更清晰
)

要是WorldMapR不好用,试试主流的ggplot2方案

如果WorldMapR出现兼容性问题,用ggplot2配合rnaturalearth是R里更通用的地图绘制方案,步骤也很清晰:

1. 安装加载依赖包

install.packages(c("ggplot2", "rnaturalearth", "rnaturalearthdata"))
library(ggplot2)
library(rnaturalearth)

2. 合并地图数据和你的病例数据

# 获取中等精度的世界地图数据
world_map <- ne_countries(scale = "medium", returnclass = "sf")
# 合并地图数据和你的病例数据,用iso_a2关联
merged_data <- merge(world_map, Underlag_heatmap, by.x = "iso_a2", by.y = "iso_a2", all.x = TRUE)

3. 绘制热力图

ggplot(data = merged_data) +
  geom_sf(aes(fill = Cases)) +
  # 用viridis颜色渐变,把没有数据的国家设为浅灰色
  scale_fill_viridis_c(option = "plasma", na.value = "lightgray", limits = c(0, 50)) +
  labs(title = "H5N1病例数国家热力图", fill = "病例数") +
  theme_minimal() +
  # 去掉坐标轴的文字和刻度,让地图更干净
  theme(axis.text = element_blank(), axis.ticks = element_blank())

备注:内容来源于stack exchange,提问作者Magnus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:18:01