如何使用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
相关产品推荐
相关产品推荐

