如何使用ggplot2绘制分组横向柱状图 替换R基础barplot代码
ggplot2 实现分组水平柱状图方案
你当前使用的是宽格式表结构,ggplot2 绘制分组柱状图需要先转换为长格式,以下是完整可直接运行的实现代码:
第一步:加载依赖包
如果你已经安装过tidyverse包可以直接加载,没有的话先运行install.packages("tidyverse")安装即可:
library(tidyverse)
第二步:转换数据结构
将现有宽表数据转为ggplot2适用的长格式:
# 转换为长格式 data_long <- data %>% pivot_longer( cols = -Accounts, # 排除Accounts列,其余列都转为长格式 names_to = "指标类型", # 存储原来的列名(Income/Expense/Benefit)的新列名 values_to = "金额" # 存储对应数值的新列名 ) # 确保金额列是数值格式,兼容原始数据为字符串的场景 data_long$金额 <- as.numeric(data_long$金额)
第三步:绘制分组水平柱状图
绘图逻辑和你原基础绘图效果完全对齐,还可以根据需要调整配色、主题风格匹配现有图表:
ggplot(data_long, aes(x = Accounts, y = 金额, fill = 指标类型)) + # position_dodge设置同组柱子并列显示,宽度可自行调整 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 翻转坐标轴变为水平柱状图,和原基础绘图效果一致 coord_flip() + # 自定义配色,这里用rainbow和你原代码配色对齐,也可以替换成其他配色方案 scale_fill_manual(values = rainbow(length(unique(data_long$指标类型)))) + # 调整主题,让轴标签水平显示,和你原代码的las=1效果一致 theme_bw() + theme( axis.text.y = element_text(hjust = 1), legend.position = "top" # 图例位置可自行调整,可选right/bottom等 ) + # 可选:自定义轴标题和图表标题 labs( x = "账户类型", y = "金额", fill = "指标类型" )
如果需要调整柱子宽度、配色、图例位置等,直接修改对应参数即可,最终输出的图表风格和其他ggplot2绘制的图表完全统一。
内容的提问来源于stack exchange,提问作者Damien Cassou
相关产品推荐
相关产品推荐

