2011-08-09 10 views
7

मैं एक कारक द्वारा पहचाने जाने वाले 2-डी घनत्व वाले प्लॉट करने के लिए ggplot के geom_tile का उपयोग कर रहा हूं। प्रत्येक पहलू का स्तर सभी डेटा के अधिकतम डेटा से अधिकतम डेटा तक जाता है, लेकिन प्रत्येक पहलू में geom_tile केवल उस पहलू में प्लॉट किए गए डेटा की सीमा तक फैली हुई है।मैं प्रत्येक पहलू को भरने के लिए ggplot के geom_tile को कैसे मजबूर कर सकता हूं?

उदाहरण कोड है कि समस्या को दर्शाता है:

library(ggplot2) 

data.unlimited <- data.frame(x=rnorm(500), y=rnorm(500)) 
data.limited <- subset(data.frame(x=rnorm(500), y=rnorm(500)), x<1 & y<1 & x>-1 & y>-1) 

mydata <- rbind(data.frame(groupvar="unlimited", data.unlimited), 
       data.frame(groupvar="limited", data.limited)) 

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar) 

facet

भागो कोड, और आप दो पहलुओं देखेंगे। एक पहलू एक "असीमित" यादृच्छिक सामान्य वितरण की घनत्व साजिश दिखाता है। दूसरा पहलू मूल के बारे में 2x2 वर्ग के भीतर झूठ बोलने के लिए यादृच्छिक सामान्य छिड़काव दिखाता है। "सीमित" पहलू में geom_tile पहलू को भरने के बजाय इस छोटे बॉक्स के अंदर ही सीमित रखा जाएगा।

last_plot() + 
    scale_x_continuous(limits=c(-5,5)) + 
    scale_y_continuous(limits=c(-5,5)) 

specified limits

ये पिछले तीन लाइनों के साथ निर्दिष्ट x और y सीमा एक ही डेटा प्लॉट, और हम देखते हैं कि न तो पहलू इस मामले में बढ़त के लिए टाइल वर्गों फैली हुई है।

क्या प्रत्येक पहलू में geom_tile को पहलू की पूरी श्रृंखला तक बढ़ाने के लिए कोई तरीका है?

उत्तर

14

मुझे लगता है कि आप scales = "free" और expand = c(0,0) का एक संयोजन के लिए देख रहे:

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar,scales = "free") + 
    scale_x_continuous(expand = c(0,0)) + 
    scale_y_continuous(expand = c(0,0)) 

enter image description here

संपादित ओपी के स्पष्टीकरण को देखते हुए यहां बस पैनल की स्थापना के माध्यम से एक ही विकल्प है पृष्ठभूमि मैन्युअल रूप से:

ggplot(mydata) + 
    aes(x=x,y=y) + 
    stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) + 
    facet_wrap(~ groupvar) + 
    scale_fill_gradient(low = "blue", high = "red") + 
    opts(panel.background = theme_rect(fill = "blue"),panel.grid.major = theme_blank(), 
     panel.grid.minor = theme_blank()) 

enter image description here

+0

नहीं, मैं चाहता हूं कि सभी पहलुओं का एक ही स्तर हो। असल में, मैं सीमित तरफ 2x2 बॉक्स के बाहर ठोस नीला चाहता हूं, यह इंगित करने के लिए कि शून्य घनत्व है। दूसरे शब्दों में, मैं नहीं चाहता कि तराजू डेटा की सीमा तक कम हो जाएं, मैं सिर्फ पूरे क्षेत्र को geom_tile के साथ स्केल बदलने के बिना कवर करना चाहता हूं। –

+0

उस स्थिति में आप मैन्युअल रूप से पैनल पृष्ठभूमि को सेट करने से बेहतर हैं। मैं एक उदाहरण के साथ अपडेट करूंगा ... – joran

+0

@Ryan - आप यह भी देख सकते हैं [http://stackoverflow.com/questions/6906661/ggplot2-make-missing-value-in-geom-tile-not- खाली) एक और विकल्प के लिए, हालांकि मुझे विश्वास है कि मानता है कि आपके हाथ में घनत्व मूल्य हैं। – joran

संबंधित मुद्दे

 संबंधित मुद्दे