首页 > 解决方案 > 我在 ggplot2 中带有错误栏的条形图是错误的

问题描述

最小的可重现示例在这里:

library(ggplot2)

vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))

df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)

ggplot(df, aes(x=cat, y=vals, fill=vals)) +
  geom_bar(stat='identity', position='dodge') +
  geom_errorbar(aes(ymin=vals-err, ymax=vals+err), width=.1)

此代码返回如下图: 什么是

但是我希望每个cat. 更接近于此:

应该

我在这里做错了什么?

标签: rggplot2

解决方案


如果每一行都是单独的观察,则需要明确说明。做一个索引变量,把它变成一个因子,然后把它放在 x 轴上。

如果obs跨类别重复(例如,如果 A 和 B 都obs编号为 1、2 和 3),则cat使用facet_wrap(~ cat).


vals <- c(10, 12, 13, 20, 21, 28)
err <- c(0.85, 1.2, 0.9, 1.35, 2.2, 0.98)
cat <- c(rep("A",3),rep("B",3))

df <- data.frame(vals, err, cat)
df$cat<- as.factor(df$cat)
df$obs <- factor(1:nrow(df))

ggplot(df, aes(x=obs, y=vals, fill=cat)) +
  geom_col(position='dodge') +
  geom_errorbar(aes(ymin=vals-err, ymax=vals+err))

输入结果


推荐阅读