2012-04-18 24 views
10

doldurma değerine bağlı olarak belirli noktalar için alfa = 0 olarak ayarlıyorum Şu anda, Stat_density2d() ile ilgili Hadley's ggplot2 0.9.0 sayfasındaki örneklere çok benzer grafikler içeren bir proje üzerinde çalışıyorum. ggplot2:

enter image description here

library(ggplot2) 
dsmall <- diamonds[sample(nrow(diamonds), 1000), ] 
d <- ggplot(dsmall, aes(carat, price)) + xlim(1,3) 
d + stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) 
last_plot() + scale_fill_gradient(limits=c(1e-5,8e-4)) 

Şimdi, ne ile mücadele ediyorum esasen (alfa = 0) değil dolgu-aralığındaki tüm karoları için alfa kapatmak için bir yoldur. Dolayısıyla, resimde görülen her gri karo, alfa 0 olarak ayarlanmalıdır. Bu, özellikle bir haritanın üzerine yerleştirildiğinde, görüntüyü çok daha güzel hale getirir.

Herhangi bir öneri varsa, bu çok takdir edilecektir.

+3

gri alan scale_fill_gradient için na.value argüman tarafından kontrol edilir, ama ben bile şeffaf bir renk belirtirken (gibi na.value = rgb (1,1,1,0)) opak çıkıyor, yani başka bir şey olmalı. – Fojtasek

+0

Tamam, belki de bir scale_alpha_continuous limitini, dolgu değerine (yoğunluk) bağımlı olacak şekilde ayarlayabilirsek, o zamana kadar "grey90" ayarı yapılmasına rağmen, bugüne kadar alfa na.value = 0 ... –

+0

no şans getirin. o * neredeyse * Tamam arka plan ızgarasının rengi bu yana ... Ben gerçekten bu bir ggplot "sorun" (buglet/dilek listesi?) olduğunu şüpheliyim ... muhtemelen ilgili https://github.com/hadley/ggplot2/issue/475? –

cevap

9

Bu iş gibi görünüyor:

d + stat_density2d(geom="tile", 
    aes(fill = ..density.., 
    alpha=cut(..density..,breaks=c(0,1e-5,Inf))), 
    contour = FALSE)+ 
scale_alpha_manual(values=c(0,1),guide="none") 

enter image description here

+0

Mükemmel! Yardımın için teşekkürler, Ben. –

+0

Bu harika, bana çok yardımcı oldu. Yapabilseydim 3 tane verirdim. – cengel

11

başka olasılık, sadece yerine cut ait ifelse kullanarak.

d + stat_density2d(geom="tile", 
    aes(fill = ..density.., alpha = ifelse(..density.. < 1e-5, 0, 1)), 
    contour = FALSE) + 
scale_alpha_continuous(range = c(0, 1), guide = "none") 

enter image description here

+0

Bu da harika çalışıyor. Sadece "aes (..)" seçeneklerinde 'alfa'nın ayarlanmasının neden yeterli olmadığını açıklayabilir misiniz, ancak doldurma alanının saydamlığı yalnızca aralığı" scale_alpha_continuous "ile ayarlayarak neden kontrol edilebilir? Örneğin, doldurma alanını biraz saydam yapmak için 'alfa = ifelse (.. yoğunluk .. <1e-5, 0, 0.7)' ve 'scale_alpha_continuous (aralık = c (0, 0.7))' kullandım. – cengel