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

如何使用ggplot绘制随时间变化的累计行计数折线图

问题根源

你当前代码直接将ID字段映射为Y轴数值,绘制的是ID随年份的变化趋势,并非累计行计数:你的ID列是从73开始倒序编号,同一年份对应多个不同ID值,直接连线自然会出现下降段,不符合累计值单调递增的要求。

正确实现逻辑

累计行计数的核心是按年份升序排列后,逐段累加对应年份的条目数量,不能直接复用ID列作为累计值。操作步骤如下:

  • 按年份分组,统计每个年份对应的新增条目数
  • 按年份从小到大排序,对每年的新增数做累加得到累计计数
  • 用年份为X轴、累计计数为Y轴绘制折线图

完整代码

# 加载依赖包
library(ggplot2)
library(dplyr)

# 示例数据构造(替换为你自己的全量数据集即可)
df <- data.frame(
  ID = 73:68,
  name = paste0("name", 73:68),
  year = c(2021, 2021, 2019, 2017, 2015, 2015)
)

# 计算累计值
plot_data <- df %>%
  count(year, name = "add_count") %>% # 统计每年新增条目数
  arrange(year) %>% # 按年份升序排序,必须做否则累计计算会出错
  mutate(cum_total = cumsum(add_count)) # 逐段累加得到累计值

# 绘制折线图
ggplot(plot_data, aes(x = year, y = cum_total)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) + # 增加节点标记,提升可读性
  geom_text(aes(label = cum_total), vjust = -0.8) + # 标注每个节点的累计值
  labs(x = "年份", y = "累计行计数")
效果说明

你当前提供的示例数据仅包含6行,运行上述代码得到的2021年累计值为6。只要替换为你自己的完整73行数据集,不需要修改计算逻辑,最终2021年的累计值就会自动匹配为73,且折线全程保持递增,不会出现下降。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:27:19