如何在同一坐标系绘制美国两党合并的新冠人均病例曲线?
解决方法:按党派聚合COVID病例数据
我帮你找到问题根源啦!你之前的聚合步骤没有对同党派、同日期的州数据做合并计算,只是单纯引用了CasesPop字段,所以数据还是保留了每个州的独立条目,绘图自然还是50个州的散点。
要得到民主党、共和党各一条的趋势曲线,我们需要先完成正确的数据聚合,这里有两种合理的实现思路:
方法1:计算同党派州的平均每10万人口病例数
如果想展示同党派州的平均病例水平,可以直接对CasesPop取均值:
# 修正聚合逻辑:按党派+日期计算平均病例率 corona_party_cases <- corona_party_states %>% group_by(Party, Date) %>% summarise(avg_CasesPop = mean(CasesPop, na.rm = TRUE), .groups = "drop") # 绘制聚合后的趋势图(折线+散点更清晰) ggplot(data = corona_party_cases) + geom_line(aes(x = Date, y = avg_CasesPop, color = Party), linewidth = 1) + geom_point(aes(x = Date, y = avg_CasesPop, color = Party)) + scale_color_manual(values=c("Democratic" = "blue", "Republican" = "red")) + ggtitle("COVID-19 Cases per Capita by Party (Average)") + ylab("Cases/100K") + xlab("Timeline") + theme_bw()
方法2:按人口加权计算全党派病例率(更准确)
如果想反映同党派州的整体真实病例水平(考虑各州人口差异),应该先汇总同党派的总确诊和总人口,再重新计算每10万人口病例数:
# 先汇总同党派+日期的总确诊、总人口 corona_party_cases <- corona_party_states %>% group_by(Party, Date) %>% summarise( total_confirmed = sum(totalConfirmed, na.rm = TRUE), total_population = sum(totalPopulation, na.rm = TRUE), .groups = "drop" ) %>% # 重新计算加权后的每10万人口病例数 mutate(CasesPop = total_confirmed * 100000 / total_population) # 绘制加权后的趋势图 ggplot(data = corona_party_cases) + geom_line(aes(x = Date, y = CasesPop, color = Party), linewidth = 1) + geom_point(aes(x = Date, y = CasesPop, color = Party)) + scale_color_manual(values=c("Democratic" = "blue", "Republican" = "red")) + ggtitle("COVID-19 Cases per Capita by Party (Population Weighted)") + ylab("Cases/100K") + xlab("Timeline") + theme_bw()
关键细节说明:
.groups = "drop"用于聚合后取消分组,避免后续绘图出现意外问题;- 用
geom_line配合geom_point能更直观展示时间趋势,你也可以根据需求调整为纯散点; - 两种方法的核心区别是是否考虑人口权重:方法2的结果更贴近同党派州的整体疫情情况,推荐使用。
内容的提问来源于stack exchange,提问作者lena_sr
相关产品推荐
相关产品推荐

