I'm trying to create a faceted plot using ggplot and geom_errorbar. However, each different facet may have have vastly different x ranges, and so the width of the error bar isn't looking "good". Here's a 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" )
In the first plot, the error bars for group 1 look great, but 2 and 3 are far too wide. In the second plot, the error bars are way too small for group 1. Is there an easy way to fix this? I'm thinking I might just have to use width=0, but I'd like to avoid that.
Workaround for this problem would be to add to your data frame new column wd
that contains width of the errorbars for each level.
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)
Then use this new column to set width=
in geom_errorbar()
. It should be set inside the aes()
call.
ggplot( test, aes(x=x, ymin=ymin, ymax=ymax) ) +
geom_errorbar(aes(width=wd)) + facet_wrap( ~ group, scale="free_x" )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With