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

R绘制每10万人口新冠病例折线图输出异常问题求解

R疫情可视化折线图异常排查与修复

核心错误点

  • 依赖包缺失:仅加载了utils包,未加载数据处理、绘图所需的dplyr、ggplot2、lubridate等包。
  • 日期格式错误:dateRep列读取后为字符串类型,直接作为x轴会按字符逻辑排序,导致时序混乱,是图表异常的核心原因。
  • 每10万人口新增计算错误:直接对病例数除以10万的逻辑错误,正确计算规则为单日新增病例 / 国家总人口 * 100000,可直接调用数据集自带的popData2020人口字段计算。
  • 国家筛选逻辑冗余:无需手动录入10个国家名称,可直接从之前统计的累计死亡Top10结果中提取,避免手动输入误差。

修复后完整代码

# 加载所需依赖包
library(dplyr)
library(ggplot2)
library(lubridate)

# 读取原始数据
COVID_data <- read.csv("https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/csv", na.strings = "", fileEncoding = "UTF-8-BOM")

# 统计累计死亡最高的10个国家
abs_total_deaths <- COVID_data %>% 
  group_by(countriesAndTerritories) %>% 
  summarise(abs_total_deaths = sum(deaths, na.rm = TRUE)) %>% 
  arrange(desc(abs_total_deaths)) %>% 
  slice(1:10) # 直接取Top10,无需手动录入

# 数据处理+绘图
COVID_data %>% 
  filter(countriesAndTerritories %in% abs_total_deaths$countriesAndTerritories) %>% 
  filter(cases > 0) %>% 
  mutate(
    dateRep = dmy(dateRep), # 转换为日期格式,修复x轴顺序问题
    new_cases_abs = cases, # 绝对值新增
    new_cases_per10w = cases / popData2020 * 100000 # 正确计算每10万人口新增
  ) %>% 
  ggplot() +
  geom_line(aes(x = dateRep, y = new_cases_per10w, color = countriesAndTerritories), size = 1) +
  labs(x = "日期", y = "新增病例数", title = "每10万人口单日新增病例数") +
  facet_wrap(~countriesAndTerritories) +
  theme_bw()

如果需要同时对比绝对值和每10万人口的两个折线图,可在mutate后补充以下代码转换数据格式:

tidyr::pivot_longer(cols = c(new_cases_abs, new_cases_per10w), names_to = "指标类型", values_to = "数值")

再把aes中的y值改为数值,在facet_wrap中增加指标类型的分面即可同时满足作业要求的两组对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:54:04