2012-04-18 15 views
10

के आधार पर कुछ बिंदुओं के लिए अल्फा = 0 सेट करें, मैं वर्तमान में एक प्रोजेक्ट पर काम कर रहा हूं जिसमें stat_density2d() के संबंध में हैडली के ggplot2 0.9.0 पृष्ठ में उदाहरणों के समान प्लॉट बनाने के लिए शामिल हैं।ggplot2: भरने के मूल्य

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 पर सेट किया जाना चाहिए। इससे छवि को बहुत अच्छा लगेगा, खासकर जब मानचित्र के शीर्ष पर ओवरलेइंग हो।

यदि किसी के पास कोई सुझाव है, तो इसकी सराहना की जाएगी।

+3

ग्रे क्षेत्र na.value तर्क scale_fill_gradient करने के नियंत्रण में है, लेकिन फिर भी जब मैं एक पारदर्शी रंग निर्दिष्ट (जैसे na.value = rgb (1,1,1,0)) यह अपारदर्शी बाहर आता है, तो कुछ और चलना चाहिए। – Fojtasek

+0

ठीक है, तो शायद अगर हम fill_alpha_continuous की सीमा को भरने के मूल्य (घनत्व) पर निर्भर होने के लिए सेट कर सकते हैं, तो अल्फा na.value = 0 ... –

+0

सेट करें अब तक कोई भाग्य नहीं है, हालांकि 'gray90' पर सेट करना यह * लगभग * ठीक है क्योंकि यह पृष्ठभूमि ग्रिड का रंग है ... मुझे वास्तव में संदेह है कि यह एक ggplot "मुद्दा" (बगलेट/इच्छासूची?) है ... संभवतः https://github.com/hadley/ggplot2 से संबंधित है/मुद्दे/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

एक और संभावना है, बस cut के बजाय ifelse का उपयोग कर।

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

यह भी बहुत अच्छा काम करता है। क्या आप समझा सकते हैं कि 'एएसए (..)' विकल्पों में केवल 'अल्फा' सेट करने के लिए पर्याप्त क्यों नहीं है, लेकिन भरने वाले क्षेत्र की पारदर्शिता को केवल 'scale_alpha_continuous'' के साथ सीमा निर्धारित करके नियंत्रित किया जा सकता है? उदाहरण के लिए, मैंने 'अल्फा = ifelse (.. घनत्व .. <1e-5, 0, 0.7) 'और' scale_alpha_continuous (श्रेणी = सी (0, 0.7))' भरने वाले क्षेत्र को थोड़ा पारदर्शी बनाने के लिए उपयोग किया। – cengel