Ggplot2: установите альфа = 0 для определенных точек в зависимости от значения заливки

В настоящее время я работаю над проектом, который включает создание графиков, очень похожих на примеры на странице Hadley ggplot2 0.9.0 относительно stat_density2d().

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

enter image description here

Теперь то, с чем я борюсь, - это способ по существу превратить альфа (альфа = 0) для всех плит, не входящих в диапазон заполнения. Таким образом, каждая серая плитка, видимая на изображении, должна быть установлена ​​равной 0. Это сделает изображение намного приятнее, особенно если оно наложено поверх карты, например.

Если у кого-то есть какие-либо предложения, это было бы очень полезно.

Ответ 1

Это работает:

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

Ответ 2

Другая возможность, просто используя ifelse вместо cut.

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