分面时ggplot geom_errorbar的宽度(和scale ="free")

ran*_*tic 11 plot r ggplot2

我正在尝试使用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" )
Run Code Online (Sandbox Code Playgroud)

在第一个图中,组1的误差条看起来很棒,但是2和3的距离太宽.在第二个图中,错误条对于组1来说太小了.有一种简单的方法可以解决这个问题吗?我想我可能只需要使用width = 0,但我想避免这种情况.

第一个情节

第二个情节

Did*_*rts 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)
Run Code Online (Sandbox Code Playgroud)

然后使用这个新列设置width=geom_errorbar().它应该在aes()通话中设置.

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

在此输入图像描述