R中使用ggplot2或Plotly绘制带线性趋势线的分组柱状图
R语言复现带线性趋势线分组柱状图实现方案
操作步骤
- 步骤1:安装并加载所需依赖包
核心绘图使用ggplot2实现静态图效果,可选装plotly生成交互式图表:# 首次运行需执行安装命令 install.packages(c("ggplot2", "reshape2", "plotly")) # 加载依赖包 library(ggplot2) library(reshape2) - 步骤2:数据集预处理
原始数据中季度为无序文本,需先转为有序因子固定x轴时间顺序,再将宽格式数据转换为ggplot适配的长格式:# 导入测试数据集 data <- data.frame(Year=c('2020-2021' , '2021-2022' , '2021-2022' ,'2021-2022', '2021-2022'), Quarter=c('Q4 (Jan-Mar)' ,'Q1 (April-June)' , 'Q2 (Jul-Sep)' ,'Q3 (Oct-Dec)' ,'Q4 (Jan-Mar)'), Budget=c(153870.19 ,156815.8, 163501.44, 187891,246433), Expenditure=c(69593.11, 104570, 98682, 104948, 130012)) # 设置季度为有序因子,固定x轴排序逻辑 data$Quarter <- factor(data$Quarter, levels = c('Q4 (Jan-Mar)','Q1 (April-June)', 'Q2 (Jul-Sep)','Q3 (Oct-Dec)')) # 宽表转长表,拆分指标类型与对应数值 data_long <- melt(data, id.vars = c("Year","Quarter"), variable.name = "Metric", value.name = "Value") - 步骤3:绘制核心图表
先绘制分组柱状图层,再为预算、支出两个系列分别添加无置信区间的线性趋势线,配色对齐Excel默认效果:chart <- ggplot(data_long, aes(x = Quarter, y = Value, fill = Metric)) + # 分组柱状图层,调整柱子宽度与组内间距 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 线性趋势线层,按指标分组拟合,关闭默认置信区间阴影 geom_smooth(aes(group = Metric, color = Metric), method = "lm", se = FALSE, formula = y ~ x, linewidth = 1, linetype = "dashed") + # 自定义填充色与线条色,采用Excel默认蓝橙配色 scale_fill_manual(values = c("#4472C4", "#ED7D31")) + scale_color_manual(values = c("#4472C4", "#ED7D31")) + # 设置标题与坐标轴标签 labs(title = "季度预算与支出统计", x = "统计季度", y = "金额", fill = "统计指标", color = "趋势线") + # 主题样式调整 theme_bw() + theme(plot.title = element_text(hjust = 0.5), legend.position = "bottom") # 输出静态图表 print(chart) - 步骤4(可选):生成交互式图表
如果需要悬浮显示数值、缩放等交互效果,直接用ggplotly转换即可:library(plotly) interactive_chart <- ggplotly(chart) print(interactive_chart)
调整提示:
- 趋势线线型可修改
linetype参数,1为实线、2为虚线、3为点线- 柱子宽度、组间距可通过
geom_col(width)和position_dodge(width)两个参数联动调整- 若新增季度数据,只需同步更新
factor内的levels顺序即可避免x轴排序错乱
内容的提问来源于stack exchange,提问作者ISMAIL AHMED
相关产品推荐
相关产品推荐

