2012-04-18 10 views
10

私は現在、ハドレーのggplot2 0.9.0ページのstat_density2d()に関する例とよく似たプロットを作成するプロジェクトに取り組んでいます。 ggplot2:塗りつぶし値に応じて特定のポイントに対してアルファ= 0を設定します

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

は今、私が苦しんでいますことは、本質的に(アルファ= 0)ではない塗りつぶし範囲内のすべてのタイルのアルファをオフにする方法です。したがって、イメージに表示されるすべての灰色のタイルは、アルファを0に設定する必要があります。これは、たとえばマップの上にオーバーレイする場合など、イメージをもっとよくするでしょう。

誰かが何か提案があれば、これは非常に感謝しています。

+3

灰色領域はscale_fill_gradientするna.value引数によって制御され、それでも私は、透明色を指定した場合(等na.value = RGB(1,1,1,0))それは不透明になるので、何か他のことが起こっているはずです。 – Fojtasek

+0

さて、scale_alpha_continuousの制限を塗りつぶし値(密度)に依存するように設定することができたら、alpha na.value = 0 ... –

+0

これまでのところ、 'gray90'に設定すると、それはバックグラウンドグリッドの色ですから*ほぼ* OKです。これはggplotの "issue"(バグレット/ウィッシュリスト?)と思われます。おそらくhttps://github.com/hadley/ggplot2に関連しています/ issues/475? –

答えて

9

これは動作するようです:

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

パーフェクト!助けてくれてありがとう、ベン。 –

+0

これはすばらしく、私を助けました。もし私ができるなら、私は3つのアップフォノートを与えるだろう。 – cengel

11

別の可能性は、だけではなく、cutifelseを使用します。

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

これはまた素晴らしい動作します。 'aes(..)'オプションのみで 'alpha 'を設定するだけでは不十分な理由を説明できますが、' scale_alpha_continuous'で範囲を設定することによって、塗りつぶし領域の透明度を制御できるのはなぜですか?例えば、 'alpha = ifelse(.. density .. <1e-5,0,0.7)'と 'scale_alpha_continuous(range = c(0、0.7))'を使って、塗りつぶし領域を少し透明にしました。 – cengel

関連する問題