我正在尝试使用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,但我想避免这种情况。
答案 0 :(得分:11)
此问题的解决方法是向数据框添加新列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" )