2013-01-24 57 views
10

我正嘗試使用ggplot和geom_errorbar創建一個多面圖。但是,每個不同的方面可能具有極大不同的x範圍,因此錯誤欄的寬度看起來並不「好」。這是一個MWE:ggplot當faceting(和scale =「free」)時geom_errorbar的寬度

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的誤差線太小。有沒有簡單的方法來解決這個問題?我想我可能只需要使用寬度= 0,但我想避免這一點。

First Plot

Second Plot

回答

11

的辦法解決這個問題,將添加到包含errorbars每個級別的寬度數據幀新列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") 

enter image description here

相關問題