2013-08-14 6 views
5

विभिन्न डेटाफ्रेम से डेटा का उपयोग कर ggplot2 से एकाधिक stat_contour प्लॉट को ओवरले करना संभव है?ggplot2 का उपयोग कर उसी ग्राफ पर एकाधिक stat_contour प्लॉट्स को ओवरले कैसे कर सकता हूं?

मैंने विभिन्न भूगर्भों को ओवरले करने के लिए समाधान पढ़े हैं, लेकिन इसके लिए मैं विशेष रूप से stat_contour का उपयोग करना चाहता हूं।

एक्स और वाई चर दोनों डेटा सेट के लिए समान हैं।

# some sample data 
require(ggplot2) 
require(reshape2) 

v1 <- melt(volcano) 
v2 <- v1 
v2$value <- v2$value*1.5 

तो व्यक्तिगत रूप से हर एक की साजिश रचने काम करता है::

ggplot(v1, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#ff6666") 

ggplot(v2, aes(x = Var1, y = Var2, z = value)) + 
+ stat_contour(aes(color = ..level..)) + scale_colour_gradient(low = "white", high="#A1CD3A") 

वहाँ ही ग्राफ पर इन घनत्व भूखंडों ओवरले करने के लिए कोई तरीका है कुछ नमूना डेटा के साथ काम करने?

मैंने एक कारक चर बनाने की कोशिश की है और प्रत्येक सेट को एक अलग मान असाइन किया है, फिर उन्हें ढेर कर रहा है, लेकिन मुझे एक त्रुटि मिलती है क्योंकि उनके पास प्रत्येक एक्स और वाई (Var 1 और Var2) के लिए एक से अधिक मान हैं।

सहायता के लिए धन्यवाद!

+0

आप एक साजिश करने के लिए कई 'geom_contour's जोड़ने के लिए सक्षम होना चाहिए, लेकिन आप अलग तराजू का उपयोग करने में सक्षम नहीं होगा, केवल 1 पैमाने साजिश प्रति सौंदर्य प्रति अनुमति दी है। इसलिए आपको अपने दो डेटा सेटों के बीच भेदभाव के लिए एक अलग समाधान के साथ आना पड़ सकता है। –

उत्तर

7

ggplot2 में दो समोच्च डेटासेट को ओवरले करने के लिए यहां कई विकल्प दिए गए हैं। एक महत्वपूर्ण चेतावनी (जैसा कि @ ड्रू स्टीन द्वारा नोट किया गया है) यह है कि आपके पास एक ही साजिश में दो अलग colour स्केल नहीं हो सकते हैं।

# Add category column to data.frames, then combine. 
v1$category = "A" 
v2$category = "B" 
v3 = rbind(v1, v2) 

p1 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(binwidth=10) + 
    theme(panel.background=element_rect(fill="grey90")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 1") 

p2 = ggplot(v3, aes(x=Var1, y=Var2, z=value, colour=category)) + 
    stat_contour(aes(alpha=..level..), binwidth=10) + 
    theme(panel.background=element_rect(fill="white")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 2") 

p3 = ggplot(v3, aes(x=Var1, y=Var2, z=value, group=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 3") 

p4 = ggplot(v3, aes(x=Var1, y=Var2, z=value, linetype=category)) + 
    stat_contour(aes(color=..level..), binwidth=10) + 
    scale_colour_gradient(low="white", high="#A1CD3A") + 
    theme(panel.background=element_rect(fill="grey50")) + 
    theme(panel.grid=element_blank()) + 
    labs(title="Plot 4") 

library(gridExtra) 
ggsave(filename="plots.png", height=8, width=10, 
     plot=arrangeGrob(p1, p2, p3, p4, nrow=2, ncol=2)) 
  • प्लॉट 1: प्लॉट aes(colour=category)
  • प्लॉट 2 के साथ विभिन्न ठोस रंग में दो परतों: ..level.. अल्फा पारदर्शिता का उपयोग कर दिखाएं। नकल दो अलग रंग ग्रेडियेंट है।
  • प्लॉट 3: समान परत वाले दोनों परतों को प्लॉट करें। aes(group=category)
  • प्लॉट 4: एकल रंग ढाल का उपयोग करें, लेकिन परतों के साथ परतों को अलग करें।

enter image description here

+0

धन्यवाद। ऐसा लगता है कि कल्पना के लिए संभव निकटतम समाधान संभव है। 'GridExtra' पैकेज को भी शुरू करने के लिए धन्यवाद, मैं इसे देख लूंगा। –

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