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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:27:22