我正在尝试使用ggplot和geom_errorbar创建多面图。但是,每个不同的方面可能具有截然不同的x范围,因此误差线的宽度看起来并不“好”。这是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,但我想避免这种情况。
最佳答案
解决此问题的方法是将新列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" )