Изменение ширины полосы при использовании stat_summary с ggplot

Я использую stat_summary в ggplot для построения гистограммы. Я хотел бы изменить ширину баров. Обычно это делается с помощью опции width. С предварительно суммированными данными и stat="identity он работает как ожидалось:

data <- data.frame(group=rep(c("a","b"), 20), y=rnorm(40,100,50))
se <- function(x, na.rm=T) sd(x, na.rm=na.rm)/sqrt(length(x))
data2 <- cast(data, group ~ ., value="y", c(mean, se))
ggplot(data2, aes(group, mean, ymin=mean-1.96*se, ymax=mean+1.96*se)) +
 geom_bar(stat="identity", width=0.5) + geom_errorbar(width=0, size=2)

Однако, в том же графике исходных данных с использованием stat_summary, полосы не изменяют ширину, а ошибки:

ggplot(data, aes(group, y)) + stat_summary(fun.y="mean", geom="bar", width=0.5) +
 stat_summary(fun.data="mean_cl_normal", geom="errorbar", width=0, size=2)

Есть ли способ изменить ширину полосы даже при использовании stat_summary?

Поскольку первый пример работает, этот вопрос, очевидно, уже имеет обход, однако мне бы очень хотелось узнать, есть ли способ сделать это с помощью stat_summary, потому что я использую его много и часто больше удобно.

Спасибо!

Ответ 1

Это тема известных проблем 444 и 235

Текущее решение состоит в том, чтобы пройти width внутри aes - это противоречит принципам ggplot (mapping vs setting), но, по крайней мере, это работает....

Обратите внимание, что вы можете использовать linerange, если вы хотите, чтобы бары ошибок без erro-баров!

ggplot(data, aes(group, y)) + 
 stat_summary(fun.y="mean", geom="bar", aes(width=0.5)) +
  stat_summary(fun.data="mean_cl_normal", geom="linerange",  size=2)

enter image description here