13

我正在尝试使用 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,但我想避免这种情况。

第一个情节

第二个情节

4

1 回答 1

13

此问题的解决方法是向您的数据框中添加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" )

在此处输入图像描述

于 2013-01-24T16:47:11.240 回答