如何基于给定mytable数据集在R中绘制与Excel一致的堆叠柱状图
在R中实现Excel风格的堆叠柱状图
先还原你的数据集:
mytable <- data.frame( Var1 = c(10,11,12,13,24,35,46,47,48,59), Home = c(523,395,829,680,2897,4689,1291,1099,1681,1962), Work = c(196,155,330,282,1210,1950,567,465,764,821) )
下面分别用R基础绘图和ggplot2实现堆叠柱状图:
方法一:R基础绘图函数实现
基础绘图的barplot()可直接处理宽格式数据,核心是通过beside=FALSE启用堆叠模式:
# 提取数值列转为矩阵(排除Var1列) data_mat <- as.matrix(mytable[, -1]) # 定义x轴刻度标签为Var1的取值 x_labels <- as.character(mytable$Var1) # 绘制堆叠柱状图 barplot(data_mat, beside = FALSE, # 启用堆叠模式(默认值,显式写出更清晰) names.arg = x_labels, # 设置x轴每个柱子的标签 col = c("#2E86AB", "#F24C00"), # 自定义Home和Work的颜色,可匹配Excel样式 main = "Home & Work 堆叠柱状图", xlab = "Var1", ylab = "数值", legend.text = colnames(data_mat), # 图例文字 args.legend = list(x = "topright") # 图例位置 )
方法二:ggplot2实现
ggplot2需要数据为长格式,先转换数据格式再绘图:
# 未安装包的话先运行:install.packages(c("ggplot2", "tidyr")) library(ggplot2) library(tidyr) # 将宽格式数据转成长格式 mytable_long <- mytable %>% pivot_longer( cols = c(Home, Work), # 需要转换的列 names_to = "类别", # 新列名:区分Home/Work values_to = "数值" # 对应数值的列名 ) # 绘制堆叠柱状图 ggplot(mytable_long, aes(x = factor(Var1), y = 数值, fill = 类别)) + geom_col(position = "stack") + # 堆叠模式,geom_col默认即为stack labs( title = "Home & Work 堆叠柱状图", x = "Var1", y = "数值", fill = "类别" ) + theme_minimal() # 可选主题,也可用theme_bw()更贴近Excel默认风格
如果需要和Excel图表样式完全匹配,还可以调整:
- 颜色:ggplot2用
scale_fill_manual(values = c("Home" = "你的颜色", "Work" = "你的颜色")),基础绘图修改col参数即可 - 坐标轴/标题样式:ggplot2调整
theme()参数,基础绘图调整par()参数
内容的提问来源于stack exchange,提问作者maple Leaf
相关产品推荐
相关产品推荐

