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

如何基于给定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:05:29