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

如何从3×2 tibble绘制分组直方图?报错求助

嘿,我来帮你搞定这个绘图问题!咱们先拆解一下你遇到的问题,再一步步修正代码:

问题根源拆解

你碰到的Error: Aesthetics must be either length 1 or the same as the data (3): y,主要有这几个原因:

  • 你的数据是宽格式(每列对应一个分组),但ggplot天生更适配长格式数据(一列存分组标签,一列存对应数值)
  • 用错了几何对象:geom_histogram()是用来展示单变量分布的,而你要对比两组的样本平均值,应该用geom_col()(柱状图)才对
  • 语法小错误:stat = "identity"和position = "dodge"是geom_col()的参数,不能单独用+挂在后面
  • 直接拿rownames()和colnames()当映射美学也不合适,得把这些信息转成数据框的正式列
修正步骤来啦

1. 先把数据转成ggplot喜欢的长格式

咱们用tidyr包的pivot_longer()来转换格式,顺便给行名加个正式列(比如叫sample):

library(tidyverse) # 同时加载ggplot2和tidyr,省得单独装

# 给行名添加为一列,再转成长格式
sample.average <- sample.average %>%
  mutate(sample = rownames(.)) %>%
  pivot_longer(cols = -sample, names_to = "group", values_to = "average")

转换后的数据会变成6行3列的结构,大概是这样:

samplegroupaverage
1control.average-0.01280627
1exp.average-1.014465
2control.average99.93987077
2exp.average10.009083
3control.average6.02685326
3exp.average3.995733

2. 绘制带图例的分组柱状图

现在用整理好的数据来画图,设置好颜色映射,自动生成图例:

ggplot(sample.average, aes(x = sample, y = average, fill = group)) +
  # 让同一样本的两个柱子并排,避免重叠
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # 添加标题和标签
  labs(title = "Control vs Experiment: Sample Averages",
       x = "Sample",
       y = "Average Value",
       fill = "Group") +
  # 自定义分组颜色,你可以换成自己喜欢的颜色
  scale_fill_manual(values = c("control.average" = "#2ecc71", "exp.average" = "#3498db")) +
  # 用清爽的主题
  theme_minimal()

要是你真的需要直方图(看分布)

如果你的需求是展示两组平均值的分布情况,那可以用长数据的average作为x轴,用分组来区分填充色:

ggplot(sample.average, aes(x = average, fill = group)) +
  # 半透明叠加,方便看重叠部分,binwidth可以根据数据调整
  geom_histogram(binwidth = 5, alpha = 0.7, position = "identity") +
  labs(title = "Distribution of Average Values",
       x = "Average Value",
       y = "Count",
       fill = "Group") +
  scale_fill_manual(values = c("control.average" = "#e74c3c", "exp.average" = "#f39c12")) +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:16