2013-01-24 12 views
10

Próbuję utworzyć fasetowaną fabułę za pomocą ggplot i geom_errorbar. Jednak każdy inny aspekt może mieć bardzo różne zakresy x, a więc szerokość paska błędu nie wygląda "dobrze". Oto MWE:ggplot geom_errorbar szerokość po faceting (i skala = "free")

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") 

W pierwszej działce, słupki błędów dla grupy 1 wyglądać świetnie, ale 2 i 3 są zbyt szerokie. Na drugim wykresie słupki błędów są zbyt małe dla grupy 1. Czy istnieje prosty sposób, aby to naprawić? Myślę, że mógłbym po prostu użyć width = 0, ale chciałbym tego uniknąć.

First Plot

Second Plot

Odpowiedz

11

Rozwiązaniem tego problemu byłoby dodać do ramki danych nowej kolumny wd zawierającej szerokość errorbars na każdym poziomie.

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) 

Następnie skorzystać z tej nowej kolumny ustawić width= w geom_errorbar(). Powinien być ustawiony w rozmowie 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

Powiązane problemy