2012-04-18 1 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 인수에 의해 제어되고 있지만, 심지어 I 투명 색상을 지정할 때 (등 na.value = RGB (1,1,1,0)) 그것은 불투명하게 나오므로 다른 어떤 일이 일어나야합니다. – Fojtasek

+0

좋아요, 그렇다면 scale_alpha_continuous의 한계를 채우기 값 (밀도)에 의존하도록 설정할 수 있다면 alpha na.value = 0 ... –

+0

'grey90'으로 설정하면 지금까지 행운이 없습니다. 그게 배경 격자의 색깔이기 때문에 * 거의 * 괜찮아 보이는데 ... 사실이게 ggplot "issue"(buglet/wishlist?)라고 생각됩니다. 아마도 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 upvotes 줄 것입니다. – 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