You need to enable JavaScript to run this app. 能否基于含国家感染率的简单数据框在RStudio中创建气泡地图?
优惠活动
大模型
产品
解决方案
定价
更多

能否基于含国家感染率的简单数据框在RStudio中创建气泡地图?

完全可以基于现有数据在RStudio中生成符合要求的气泡世界地图

实现核心思路

不需要复杂的地理数据准备,只要把你手头的国家感染率数据,和对应国家的中心点经纬度做匹配,在简易世界底图上叠加大小随感染率动态调整的圆形气泡即可,最终效果会自动实现你要的“英国对应最大气泡、挪威对应最小气泡”的比例效果。

可直接复现的操作流程

  • 第一步:安装需要的工具包
    在R控制台依次执行安装命令,覆盖绘图、地理数据加载、数据匹配的功能:
    install.packages(c("ggplot2", "maps", "dplyr", "rnaturalearth", "sf"))
    
  • 第二步:导入你提供的示例感染率数据
    直接构造和你示例完全一致的数据框即可,后续可以替换成你自己的全量数据:
    # 你的示例感染率数据
    infection_df <- data.frame(
      country = c("Sweden", "Norway", "USA", "UK"),
      infection = c(1332, 24, 24224, 53534)
    )
    
  • 第三步:匹配每个国家的中心经纬度坐标
    加载内置的全球国家地理数据集,提取每个国家的中心点经纬度,做好国名匹配映射,和感染率数据拼接:
    # 加载全球国家简易地理边界
    world_sf <- rnaturalearth::ne_countries(scale = "small", returnclass = "sf")
    # 计算每个国家的中心经纬度
    country_lonlat <- world_sf %>%
      dplyr::mutate(
        lon = sf::st_coordinates(sf::st_centroid(geometry))[, 1],
        lat = sf::st_coordinates(sf::st_centroid(geometry))[, 2],
        country_name = name_long
      ) %>%
      dplyr::select(country_name, lon, lat) %>%
      as.data.frame()
    # 统一国名匹配规则,解决国名表述差异
    country_lonlat$country_name[country_lonlat$country_name == "United States of America"] <- "USA"
    country_lonlat$country_name[country_lonlat$country_name == "United Kingdom"] <- "UK"
    # 拼接感染率数据和坐标数据
    plot_ready_data <- merge(
      x = infection_df,
      y = country_lonlat,
      by.x = "country",
      by.y = "country_name"
    )
    
  • 第四步:绘制气泡世界地图
    先加载浅灰色的世界轮廓做底图,再叠加气泡图层,把气泡大小参数绑定到感染率数值上:
    ggplot() +
      # 简易世界轮廓底图
      borders(fill = "gray92", colour = "gray80", linewidth = 0.2) +
      # 绘制动态大小的感染率气泡
      geom_point(
        data = plot_ready_data,
        aes(x = lon, y = lat, size = infection),
        colour = "#d62828",
        alpha = 0.6
      ) +
      # 调整气泡的显示范围:最小尺寸对应最低感染数(挪威的24),最大尺寸对应最高感染数(英国的53534)
      scale_size_continuous(range = c(1, 11), name = "感染数") +
      # 清理地图多余元素
      theme_void()
    

实操注意点:

  • 国名匹配是最容易踩坑的环节,比如你数据里写的"UK"、"USA"这类简称,要提前和地理数据集里的标准国名做映射,不然会出现部分国家的气泡缺失
  • scale_size_continuous里的range参数可以根据需要调整,只要两个端点的比例和感染数的比例对应,就能实现数值越大气泡越大的视觉效果,不会出现小数值看不见、大数值溢出的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 20:24:03