geom_bar 和给定数据的误差线

geom_bar and errorbars for given data

我想要 this data

的条和误差条

我设法获得了酒吧:

ggplot(FCDreach_global_mod, aes(x = as.factor(t3-t2), y = 1-value, fill=as.factor(t2-t1) )) + 
  geom_bar(stat = "identity" )

但是我不知道如何绘制误差线。我尝试了 geom_errorbar() 但无法正常工作。


绘制线图时我会使用:

stat_summary(fun.data=mean_cl_normal, geom="errorbar")  

但这似乎不适用于 geom_bar()

我试过这个:

ggplot(FCDreach_global_mod, aes(x = as.factor(t3-t2), y = 1-value, fill=as.factor(t2-t1) ) ) + 
  stat_summary(fun.y=mean,geom="bar")+
  stat_summary(fun.data=mean_cl_normal,geom="errorbar", width=0.5) 

y 上的休息与 geom_bar(stat = "identity" ) 上的休息看起来完全不同。条形的大小相同,但 y 尺度发生了一些奇怪的事情。

geom_bar:

stat_summary:

编辑:期望的输出是在条形图中显示该图的等价物,当然不包括 x 轴并将 t3-t2 放在 x

我通过以下方式获得:

ggplot(FCDreach_global_mod, aes(x=roundedRealNumVehicles/2, y=1-value, colour=as.factor(t3-t2), lty=as.factor(t2-t1)) )  +
   stat_summary( fun.y=mean, geom="line" ) + 
   stat_summary(fun.data=mean_cl_normal,geom="errorbar", width=0.5) 

在您的第一个图表中,y 轴表示 (1-value) 的每个级别 (t3-t2) 的总和。在第二个中,y 轴是平均值。因此,您可以通过使用 aggregate 重新创建这些值来手动查看,

## Question 1: what is the y-axis of the first plot?
## Aggregate by summing (1-value)
(p1 <- aggregate((1-value) ~ I(t3-t2), data=FCDreach_global_mod, sum))
#   I(t3 - t2) (1 - value)
# 1        0.4    19.51663
# 2        0.5    19.70297

## Question 2: where does the 0.075 come from in the stat_summary?
## Aggregate (1-value) taking the mean
(p2 <- aggregate((1-value) ~ I(t3-t2), data=FCDreach_global_mod, mean))
#   I(t3 - t2) (1 - value)
# 1        0.4  0.09119921
# 2        0.5  0.09038062

## Get normal confidence intervals
se <- with(FCDreach_global_mod,
           do.call(rbind,
                   lapply(split(1 - value, factor(t3-t2)), function(x)
                       mean(x) + c(-1,1)*sd(x)/sqrt(length(x))*qnorm(0.975))
                   ))


## Recreate barplot
dat <- setNames(p2, c("x", "y"))
dat <- cbind(dat, setNames(data.frame(se), c("ymin", "ymax")))

ggplot(dat, aes(x,y)) +
  geom_bar(stat="identity", aes(fill=factor(x))) +
  geom_errorbar(aes(x=x, ymin=ymin, ymax=ymax), color="black", width=0.05) +
  theme_bw()