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

R语言绘制多组折线图求助:基于data.frame统计年份观测数

解决ggplot绘制多分组折线图(按年份计数)的问题

你的代码核心问题有两个:

  • geom_line 里的 group = 1 会把所有不同origin的数据强制归为一组,导致折线混乱交叉
  • 使用stat = "count"时,没有配合正确的分组映射,无法按origin和year分别统计观测数

下面提供两种可行的解决方案:

方案1:直接在ggplot中用stat_count处理

不需要提前汇总数据,通过指定正确的分组映射,让ggplot自动按origin和year统计计数:

library(ggplot2)
library(dplyr)

metadata %>%
  filter(!is.na(origin)) %>%
  ggplot(aes(x = year, colour = origin, group = origin)) +
  geom_point(stat = "count", size = 5, alpha = 0.3) +
  geom_line(stat = "count") +
  theme_minimal()

这里把group设为origin,确保每个origin单独生成一条折线,stat = "count"会自动计算每个year+origin组合的观测数量作为Y轴值。

方案2:先汇总数据再绘图(更直观易调试)

提前用dplyr统计好每个origin每年的观测数,再绘图逻辑更清晰:

library(ggplot2)
library(dplyr)

# 预处理:统计每个origin对应年份的观测数
summary_data <- metadata %>%
  filter(!is.na(origin)) %>%
  count(year, origin, name = "obs_count")

# 绘制折线图
ggplot(summary_data, aes(x = year, y = obs_count, colour = origin, group = origin)) +
  geom_point(size = 5, alpha = 0.3) +
  geom_line() +
  theme_minimal()

count()函数会生成包含year、origin和对应观测数obs_count的汇总表,之后直接映射Y轴为obs_count即可,避免了stat参数带来的混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:30:58