Ggplot geom_errorbar width при огранке (и scale = "free" )

Я пытаюсь создать граненый сюжет с использованием ggplot и geom_errorbar. Тем не менее, каждый другой фасет может иметь значительно разные диапазоны х, поэтому ширина полосы ошибок не выглядит "хорошей". Здесь MWE:

library(ggplot2)
test <- data.frame( group=rep(c(1,2,3),each=10), ymin=rnorm(30), ymax=rnorm(30))
test$x <- rnorm(30) * (1+(test$group==1)*20)
ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
  geom_errorbar(width=5) + facet_wrap( ~ group, scale="free_x" )
ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
  geom_errorbar(width=.2) + facet_wrap( ~ group, scale="free_x" )

В первом графике строки ошибок для группы 1 выглядят великолепно, но 2 и 3 слишком широки. На втором графике полосы ошибок слишком малы для группы 1. Есть ли простой способ исправить это? Я думаю, мне просто нужно использовать width = 0, но я бы хотел этого избежать.

First Plot

Second Plot

Ответ 1

Обходной путь для этой проблемы состоял в том, чтобы добавить к вашему кадру данных новый столбец wd, который содержит ширину ошибок для каждого уровня.

test <- data.frame( group=rep(c(1,2,3),each=10), ymin=rnorm(30), ymax=rnorm(30))
test$x <- rnorm(30) * (1+(test$group==1)*20)
test$wd<-rep(c(10,0.5,0.5),each=10)

Затем используйте этот новый столбец для установки width= в geom_errorbar(). Он должен быть установлен внутри вызова aes().

ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
  geom_errorbar(aes(width=wd)) + facet_wrap( ~ group, scale="free_x" )

enter image description here