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

基于ggplot2绘制捷克共和国新冠活跃病例气泡地图的技术实现问题

解决捷克共和国新冠病例气泡地图的两个问题

我来帮你搞定这两个棘手的点:气泡大小不随病例数变化,以及把基础地图和气泡图层合并到一起。

问题1:气泡大小不随活跃病例数变化

你之前的代码只给气泡映射了填充色(fill = InitialInfections),但没把气泡大小和病例数关联起来。要让大小跟着病例数走,需要在aes()里加上size = InitialInfections,同时还可以优化气泡样式让它更清晰:

  • 用shape = 21:这是带填充色和边框的圆形,能同时区分气泡内部颜色和边缘,避免和地图混在一起
  • 加alpha = 0.7:让气泡半透明,不会完全遮挡地图的区域边界

问题2:合并基础地图和气泡图层

不需要分开创建两个ggplot对象,直接在基础地图的代码后面叠加气泡图层就行。因为两者都是基于WGS84坐标系(EPSG:4326),不会出现错位问题。

修改后的完整代码

library(sf)
library(ggplot2)
library(maps)
library(rstudioapi)
library(dplyr)
library(viridis)

# 设置工作目录(仅RStudio适用)
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
getwd()

# 读取并处理数据
my_df <- read.csv("CZE_InitialSeedData.csv", header = T)
# 确保病例数是数值型(如果你的数据里是字符格式的话)
my_df$InitialInfections <- as.numeric(my_df$InitialInfections)
# 转换为sf对象,指定经纬度列和坐标系
my_sf <- st_as_sf(my_df, coords = c('Lon', 'Lat'), crs = 4326)

# 绘制基础地图 + 气泡图层
worldmap <- map_data("world")
worldmap2 <- dplyr::filter(worldmap, region == "Czech Republic")

ggplot(worldmap2) + 
  # 绘制捷克共和国基础地图
  geom_polygon(aes(long, lat, group = group), col = "black", fill = "white", size = 1) + 
  # 添加气泡图层:同时映射大小和填充色到活跃病例数
  geom_sf(data = my_sf, aes(size = InitialInfections, fill = InitialInfections), 
          shape = 21, alpha = 0.7, color = "black") +
  # 自定义气泡大小范围(可根据你的数据调整数值)
  scale_size_continuous(name = "Active Cases", range = c(2, 10)) +
  # 自定义填充色渐变
  scale_fill_continuous(name = "Active Cases", low = "pink", high = "red", na.value = "grey50") +
  # 图表标题和标签
  labs(title = "COVID-19 in the Czech Republic", 
       subtitle = "As of July 1, 2021", 
       x = "Longitude", 
       y = "Latitude", 
       caption = "(Source: Ministerstvo zdravotnictví České republiky)") +
  # 调整图例样式
  theme(legend.position = "bottom", 
        legend.text.align = 1, 
        legend.title.align = 0.5) +
  # 强制使用统一坐标系,避免错位
  coord_sf(crs = 4326)

关键修改说明

  1. 气泡大小映射:在geom_sf的aes()里添加了size = InitialInfections,让气泡大小随病例数动态变化
  2. 气泡样式优化:shape = 21带边框的圆形+半透明效果,让气泡既突出又不遮挡地图
  3. 图层合并:直接在基础地图的ggplot对象后叠加geom_sf图层,无需分开创建两个图表
  4. 数据校验:增加了as.numeric()确保病例数是数值型,避免映射失效
  5. 坐标系统一:用coord_sf(crs = 4326)强制地图和气泡使用相同坐标系,防止错位

如果运行后还有问题,可以检查:

  • 你的Lon/Lat列是否是正确的经纬度数值
  • InitialInfections列是否有缺失值或非数值内容(可以用summary(my_df$InitialInfections)查看)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:53:12