如何用ggplot正确绘制人员年度数值时间序列折线图?
解决时间序列图绘制错误的问题
你的问题出在两个核心环节:
- 数据重塑后未处理年份字段,且错误地将X轴设为人员名称
- 绘图时的分组、颜色映射逻辑颠倒,没按人员来区分趋势线
修复步骤:
处理重塑数据,提取年份
reshape2::melt生成的variable列是val_2015这类带前缀的字符串,需要去掉前缀并转为数值型,才能作为X轴的年份变量。修正ggplot映射逻辑
X轴使用处理后的年份,Y轴对应value,用name作为分组(group)和颜色区分(colour)的依据,这样每个人员的年度数值会被正确连接成独立趋势线。
完整代码:
# 生成可复现的数据集 set.seed(123) my_data = data.frame( name = c("person1", "person2", "person3", "person4", "person5"), val_2015 = rnorm(5,10,1), val_2016 = rnorm(5,15,1), val_2017 = rnorm(5,15,1), val_2018 = rnorm(5,20,1), val_2019 = rnorm(5,20,1), val_2020 = rnorm(5,25,1) ) # 重塑并清洗数据 library(reshape2) library(ggplot2) final = melt(my_data, id.var = "name") # 提取年份并转为数值型 final$year = as.numeric(gsub("val_", "", final$variable)) # 绘制正确的时间序列图 ggplot(final, aes(x = year, y = value, colour = name, group = name)) + geom_point(size = 2) + geom_line(linewidth = 1) + labs(x = "年份", y = "数值", colour = "人员") + theme_minimal()
效果说明:
- X轴按2015-2020的顺序显示年份
- 每个人员对应一条独立颜色的趋势线,点线一一对应
- 轴标签和图例清晰直观,符合需求
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

