2011-08-09 26 views
7

GGplot'un geom_tile öğesini, bir faktörle karşılanan 2-D yoğunluklu grafikler yapmak için kullanıyorum. Her bir cismin ölçeği, tüm verilerin minimumundan tüm verilerin maksimumuna çıkar, ancak her bir yüzdeki geom_tile, numaralı yüzdeki numaralı veri aralığını genişletir.ggplot'un geom_tile öğesini her faseti doldurmaya nasıl zorlayabilirim?

Örnek sorunu gösterir kod:

library(ggplot2) 

data.unlimited <- data.frame(x=rnorm(500), y=rnorm(500)) 
data.limited <- subset(data.frame(x=rnorm(500), y=rnorm(500)), x<1 & y<1 & x>-1 & y>-1) 

mydata <- rbind(data.frame(groupvar="unlimited", data.unlimited), 
       data.frame(groupvar="limited", data.limited)) 

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar) 

facet

çalıştırın kodu ve iki yönleriyle göreceksiniz. Bir faset, "sınırsız" rasgele normal dağılımın yoğunluk grafiğini gösterir. İkinci faset, menşe ile ilgili 2x2 karelik bir alanda bulunan bir rastgele normalin kesildiğini gösterir. "Sınırlı" faset içindeki geom_tile, faset doldurmak yerine bu küçük kutu içinde sınırlandırılacaktır.

last_plot() + 
    scale_x_continuous(limits=c(-5,5)) + 
    scale_y_continuous(limits=c(-5,5)) 

specified limits

Bu son üç satır belirtilen x ve y sınırları ile aynı veri arsa, ve de faset bu durumda kenarına karo bölümleri uzanması bkz.

Her bir yüzdeki geom_tile öğesini, faset aralığına genişletmek için zorlamanın bir yolu var mı?

cevap

14

Sana scales = "free" ve expand = c(0,0) bir kombinasyonu arıyoruz düşünüyorum:

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar,scales = "free") + 
    scale_x_continuous(expand = c(0,0)) + 
    scale_y_continuous(expand = c(0,0)) 

enter image description here

DÜZENLEME

OP'ın açıklama göz önüne alındığında, burada sadece ayar paneli vasıtasıyla bir seçenek elle arka plan:

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar) + 
    scale_fill_gradient(low = "blue", high = "red") + 
    opts(panel.background = theme_rect(fill = "blue"),panel.grid.major = theme_blank(), 
     panel.grid.minor = theme_blank()) 

enter image description here

+0

Hayır, tüm özelliklerin aynı ölçeğe sahip olmasını istiyorum. Temel olarak, sadece 2x2 kutusunun dışında, buradaki sıfır yoğunluğun olduğunu göstermek için katı mavi istiyorum. Diğer bir deyişle, ölçeklerin veri aralığına daralmasını istemiyorum, sadece ölçeği değiştirmeden tüm alanı geom_tile ile kaplamak istiyorum. –

+0

Bu durumda, panel arka planını manuel olarak ayarlamanız daha iyi olur. Bir örnekle güncelleyeceğim ... – joran

+0

@Ryan - Ayrıca burada görebilirsiniz (http://stackoverflow.com/questions/6906661/ggplot2-make-missing-value-in-geom-tile-not- boş) başka bir seçenek için, elimde yoğunluk değerlerine sahip olduğunuzu varsayalım. – joran

İlgili konular