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

基于大洲级数据在R中创建气泡地图的技术问题咨询

大洲级气泡地图实现问题解答

场景与问题背景

你需要基于以下大洲级数据创建气泡地图:

df <- data.frame(
  user_location = c("Africa", "Asia", "Europe", "North America", "South America"),
  count = c(1, 3, 13, 8, 122)
)

使用rworldmap库时,尝试将自定义数据与getMap()返回的SpatialPolygonsDataFrame合并时,因sPDF@data$REGION存在NA值报错,同时对mapBubbles的用法存疑。


问题1:数据合并思路与简便方法

你的核心思路是正确的,但直接用match赋值的方式未处理NA值导致报错。推荐两种更稳妥的方法:

方法1:先清理NA再合并

先过滤掉sPDF中REGION为NA的条目,再用merge做左连接:

# 清理REGION为NA的多边形
sPDF <- sPDF[!is.na(sPDF@data$REGION), ]
# 合并数据,按REGION和user_location匹配
merged_data <- merge(sPDF@data, df, by.x = "REGION", by.y = "user_location", all.x = TRUE)
# 将合并后的数据赋值回sPDF
sPDF@data <- merged_data

方法2:直接合并保留所有条目(含NA)

如果需要保留原sPDF的所有条目,直接用merge处理,NA值会自动填充到count列:

merged_data <- merge(sPDF@data, df, by.x = "REGION", by.y = "user_location", all.x = TRUE)
sPDF@data <- merged_data

这种方式不会报错,仅未匹配到的大洲count值为NA,后续绘图时可通过参数忽略这些条目。


问题2:mapBubbles用法修正

你原代码的用法存在参数错误:mapRegion是用于指定地图显示的区域(如"world"、"Africa"),而非聚合维度。要实现大洲级气泡,需指定aggregateBy参数按REGION聚合,确保每个大洲仅显示一个气泡:

mapBubbles(
  sPDF,
  nameZSize = "count",       # 控制气泡大小的列
  aggregateBy = "REGION",    # 按大洲聚合数据
  mapTitle = "大洲用户分布气泡地图",  # 可选:添加地图标题
  colourPalette = "viridis"  # 可选:自定义气泡颜色
)

如果你的count已经是大洲级汇总值,聚合后会直接使用该值;若未提前汇总,mapBubbles会自动对count按REGION求和。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:16:13