2010-11-25 21 views
24

Bazı örnek veriler:Farklı yönlerde farklı ölçek sınırları nasıl belirlenir?

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)) 
) 

iki yanı ile basit bir dağılım:

p + scale_y_continuous(limits = c(0.2, 0.8)) 

(ya da bunun için bir sargı ile

p <- ggplot(dfr, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ g, scales = "free_y") 

tüm paneller için eksen sınırları ayarlayabilirsiniz ylim)

nasıl yapılır? Farklı yönlerde fferent eksen sınırları?

o örneğin bu argüman için bir liste geçmek olacaktır yapmak latticey yolu,

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5))) 

Maalesef bu sadece ggplot2 durumda hata verir.

DÜZENLEME:

İşte kısmi beygir. Ölçeklerin aralığını genişletmek istiyorsanız, veri setinize sınırları belirterek sütunlar ekleyebilir, ardından geom_blank ile çizebilirsiniz.

Modifiye veri kümesi:

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)), 
    ymin = rep(c(-0.6, 0.3), each = 10), 
    ymax = rep(c(1.8, 0.5), each = 10) 
) 

Güncelleme arsa:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) 

Şimdi terazi farklıdır ve sol el bir doğrudur. Maalesef, puanlar için yer açmak gerektiğinden, sağdaki ölçek sözleşme yapmıyor.

Şimdi yardımcı olması durumunda, "ölçekler yeniden hesaplanmaksızın ve scale_y_continuous'u açıkça aramadan noktaları çizmek mümkün mü?" Sorusunu yeniden yorumlayabiliriz.

cevap

5

Bunun henüz ggplot2'de olduğunu sanmıyorum. Ocak ayındaki bu discussion, sorunun ele alındığını gösteriyor.

+0

Bağlantı için teşekkürler. Olmayı düşündüğüm cevap tam değil. –

+0

@Ritchie: Hadley ile kontrol edin, ggplot2'nin geliştirme sürümlerindeki çalışmalarda bir şey olabilir –

0

Sol çizimde ölçekle sözleşme yapmak için aralığın dışında kalan noktaları kaldırın. Örneğin. Bu 0 ile 0,5 arasında değerlere doğru arsa üzerinde y ölçeği azaltacaktır:

p <- ggplot(dfr, aes(x, y)) + 
    geom_point(subset=.(g == "a" | (y > 0 & y <.5))) + 
    geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) + 
    facet_wrap(~ g, scales = "free_y") 

bu question da cevabımı bakınız.

İlgili konular