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

如何用R语言基于入侵事件频次为世界生物地理区地图着色?

解决方案

1. 修正入侵事件数据的核心问题

你用cbind()创建的invasion_df是矩阵类型,Freq会被强制转为字符型,更关键的是区域名称和shapefile中的REALM字段不匹配(比如你定义的Australasia输出后变成Australian,Afrotropic变成Ethiopian,Indomalayan变成Oriental),这是数据无法关联的根本原因。

先重新整理数据,确保名称和shapefile一致,同时转为数据框并保证Freq是数值型:

# 先运行 unique(mapa$REALM) 查看shapefile里的正确区域名称,再对应调整Var1
invasion_df <- data.frame(
  Var1 = c("Australian", "Ethiopian", "Neartic", "Neotropical", 
           "not applicable", "Oriental", "Paleartic", "Antarctica", "Oceania"),
  Freq = c(70, 25, 219, 154, 7, 9, 356, 0, 0),
  stringsAsFactors = FALSE
)

2. 关联地理数据与入侵数据

用dplyr的left_join把shapefile数据和入侵数据按区域名称关联:

library(dplyr)
library(ggplot2)
library(sf)

# 按区域名称关联,确保对应列名匹配(mapa的区域列是REALM,invasion_df是Var1)
mapa_joined <- left_join(mapa, invasion_df, by = c("REALM" = "Var1"))

3. 绘制热力图

用关联后的数据,按Freq值填充颜色生成热力图:

ggplot() +
  geom_sf(data = mapa_joined, aes(fill = Freq), alpha = 0.8) +
  # 选用色盲友好的viridis配色,适合热力图展示
  scale_fill_viridis_c(option = "plasma", name = "入侵事件频次") +
  labs(title = "世界生物地理区入侵事件热力图", x = "", y = "") +
  theme_minimal()

补充处理

如果关联后有区域的Freq为NA,可以用replace_na填充为0:

mapa_joined <- mapa_joined %>%
  mutate(Freq = replace_na(Freq, 0))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:41