如何在R中生成60个行业2014-2017年排名变化折线图?
修复行业排名变化折线图的R代码问题
问题诊断
原代码无法生成连接2014和2017年的折线,核心问题包括:
- 原始数据框结构错误:
Time列仅2个值,但setor和排名列有60个值,行数不匹配导致数据逻辑混乱 - 数据转换逻辑错误:
pivot_longer未正确关联年份与时间维度,无法形成每个行业对应两个时间点的记录 - 绘图分组错误:使用
interaction(setor, Group)分组,导致每个行业+分组被拆分为独立组,无法连接两个时间点 - 语法错误:
geom_line后多了一个+,theme()末尾多了闭合括号
修复后的完整代码
# 安装并加载依赖包(未安装时自动安装) if (!require(ggplot2)) install.packages("ggplot2") if (!require(tidyr)) install.packages("tidyr") library(ggplot2) library(tidyr) # 定义行业列表与对应年份的排名数据 setores <- c('MI2','MI3','MI4','MI5','MI6','MI7','MI8','MI9','MI10','MI11', 'MI12','MI13','MI14','MI15','MI16','MI17','MI18','MI19','MI20','MI21', 'MI22','MI23','MI24','MI25','MI26','MI27','MI28','MI29','MI30','MI31', 'N2','N3','N4','N5','N6','N7','N8','N9','N10','N11','N12','N13','N14', 'N15','N16','N17','N18','N19','N20','N21','N22','N23','N24','N25','N26', 'N27','N28','N29','N30','N31') rank_2014 <- c(1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1, 3,2,2,4,4,1,1,1,1,5,2,4,4,2,4,4,2,4,2,1,4,4,2,2,1,2,4,2,4,1) rank_2017 <- c(1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1, 3,1,2,3,2,1,1,1,1,4,1,2,2,1,3,2,1,5,2,1,2,2,2,1,1,1,2,1,3,1) # 构建正确的长格式数据:每个行业对应2014、2017两个时间点的排名记录 data <- data.frame( setor = rep(setores, 2), Time = rep(c("2014", "2017"), each = length(setores)), Rank = c(rank_2014, rank_2017) ) # 绘制排名变化折线图 ggplot(data, aes(x = Time, y = Rank, group = setor)) + geom_line(color = "black", alpha = 0.6) + # alpha参数降低线条透明度,避免重叠遮挡 geom_point(size = 2) + labs(x = "年份", y = "排名", title = "2014-2017年各行业排名变化") + scale_y_reverse(breaks = 1:5) + # 反转Y轴,让排名1(最优)显示在顶部 theme_minimal()
关键修改说明
- 修正数据结构:重新构建数据框,确保每个行业对应2014和2017两个时间点的排名记录,解决行数不匹配问题
- 调整分组逻辑:使用
group = setor让每个行业单独形成一条折线,实现两个时间点的排名连接 - 修复语法错误:移除多余的
+和无效括号 - 优化可视化效果:添加透明度参数缓解多线条重叠问题,指定Y轴刻度为1-5,贴合排名范围
内容的提问来源于stack exchange,提问作者Caroline Giusti Araújo
相关产品推荐
相关产品推荐

