2013-01-24 18 views
10

ggplot ve geom_errorbar kullanarak bir yönlü çizim oluşturmaya çalışıyorum. Ancak, her farklı faset çok farklı x aralıklarına sahip olabilir ve bu yüzden hata çubuğunun genişliği "iyi" görünmüyor. İşte MWE: İlk arsaggplot geom_errorbar genişleme (ve ölçek = "ücretsiz")

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

, Grup 1 için hata çubukları harika görünüyorsun, ama 2 ve 3 çok geniştir. İkinci grafikte, hata çubukları grup 1 için çok küçüktür. Bunu düzeltmek için kolay bir yol var mı? Ben sadece width = 0 kullanmam gerektiğini düşünüyorum, ama bundan kaçınmak istiyorum.

First Plot

Bu sorun için

Second Plot

cevap

11

Çözüm, her seviye için errorbars genişliğini içeren veri çerçevesi yeni bir sütun wd eklemek olacaktır.

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) 

Sonra geom_errorbar() yılında width= ayarlamak için bu yeni sütunu kullanabilirsiniz. aes() çağrısının içinde ayarlanmalıdır.

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

enter image description here