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

按列分组绘制分组条形图的实现问题咨询

嘿,我懂你要的效果啦——就是每个列对应的两个数值(第一行红、第二行绿)并排展示,按列的顺序依次排列对吧?咱们分两种方法来实现,一种是用更直接的基础R工具,另一种是更灵活美观的ggplot2,你可以选自己顺手的来。

方法1:基础R的barplot(无需额外安装包)

你的数据结构其实刚好适配基础R的分组条形图功能,只需要简单调整参数就能实现需求:

# 你的原始数据
x1 <- c(23.5, 21.8, 13.5, 12.3, 11.1)
x2 <- c(14.5, 23.5, 9.0, 17.5, 6.7)
x3 <- rbind(x1,x2)
x4 <- as.data.frame(x3)

# 给行命名,方便后续图例识别
rownames(x4) <- c("x1", "x2")

# 绘制分组条形图
barplot(
  as.matrix(x4),  # 将数据框转为矩阵格式
  beside = TRUE,  # 设置为分组条形(让同列的两个数值并排)
  col = c("red", "green"),  # 指定第一行x1为红色,第二行x2为绿色
  main = "分组条形图(按列分组)",
  xlab = "类别",
  ylab = "数值",
  width = 0.8  # 调整条形的宽度
)

# 添加图例,方便区分两组数据
legend("topright", legend = rownames(x4), fill = c("red", "green"))

运行这段代码后,图表就会按你要的顺序展示:先显示第一列的23.5(红)和14.5(绿),接着是第二列的21.8和23.5,以此类推。

方法2:用ggplot2(更易定制美观度)

如果你想要更灵活的图表样式(比如调整配色、字体、布局),可以用ggplot2来实现,不过需要先把数据转成ggplot偏好的长格式:

首先安装并加载所需的包:

install.packages(c("ggplot2", "tidyr"))
library(ggplot2)
library(tidyr)

然后整理数据并绘图:

# 你的原始数据
x1 <- c(23.5, 21.8, 13.5, 12.3, 11.1)
x2 <- c(14.5, 23.5, 9.0, 17.5, 6.7)
x3 <- rbind(x1,x2)
x4 <- as.data.frame(x3)
rownames(x4) <- c("x1", "x2")

# 把宽格式数据转成长格式(ggplot的标准输入格式)
x_long <- x4 %>%
  rownames_to_column(var = "组别") %>%  # 将行名转为单独一列
  pivot_longer(cols = -组别, names_to = "类别", values_to = "数值")  # 将列名和数值拆分为两列

# 绘制分组条形图
ggplot(x_long, aes(x = 类别, y = 数值, fill = 组别)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) +
  scale_fill_manual(values = c("x1" = "red", "x2" = "green")) +  # 指定自定义颜色
  labs(title = "分组条形图(按列分组)", x = "类别", y = "数值") +
  theme_minimal()

这里的position_dodge(width=0.8)用来控制同类别下两个条形的间距,width=0.7用来调整单个条形的宽度,你可以根据喜好修改这两个参数。

两种方法都能完美实现你要的效果,选自己用着顺手的就行!

内容的提问来源于stack exchange,提问作者melanie chetry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:06:57