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
相关产品推荐
相关产品推荐

