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

如何在同一坐标系绘制美国两党合并的新冠人均病例曲线?

解决方法:按党派聚合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:52:37