2012-09-17 14 views
8

संभव डुप्लिकेट:
How to overlay density plots in R?एक घनत्व वाले प्लॉट में एक एकल घनत्व साजिश में एकाधिक लाइनें कैसे प्राप्त करें?

मैं हाल ही में माइक्रोएरे डेटासेट के साथ काम शुरू कर दिया है और आर पर मेरे हाथ मैं अपने परिणाम डेटा से बाहर कुछ भूखंडों करना चाहते हैं पाने के लिए कोशिश कर रहा हूँ, लेकिन हालांकि मैं निम्नलिखित पर अटक गया हूँ।

मैं निम्नलिखित डेटा (MyData),

cpg samp1 samp2 samp3 
cpg1 0.43 0.32 0.21 
cpg2 0.43 0.22 1.00 
cpg3 0.11 0.99 0.78 
cpg4 0.65 0.32 0.12 
cpg5 0.11 0.43 0.89 

है और मैं इस के लिए एक घनत्व भूखंड प्राप्त करने के लिए चाहते हैं, तो

मैंने किया था के बाद,

plot (density(MyData$samp1), col="red") 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

लेकिन ऐसा करने से मुझे सही भूखंड नहीं देता है, क्योंकि सभी नमूना घटता साजिश सीमाओं के भीतर फिट नहीं होते हैं। मैंने जवाब तलाशने की कोशिश की, लेकिन ईमानदारी से मैं अभी भी इसे काम करने में सक्षम नहीं हूं। क्या आप मेरी मदद कर सकते हैं कि मैं उपरोक्त के लिए अपना स्केल कैसे सेट करूं? या उपरोक्त कोड के लिए मुझे अतिरिक्त क्या करना चाहिए, ताकि सभी घटता सीमा में हों ?? मेरे पास कई नमूने हैं, इसलिए मुझे ऐसा कुछ चाहिए जो सही तरीके से स्केल करने के बाद स्वचालित रूप से मेरे प्रत्येक नमूने के लिए एक अलग रंग वक्र असाइन कर सके।

अग्रिम धन्यवाद ..

+0

सवाल का जवाब में स्वीकार किए जाते हैं जवाब देने के लिए टिप्पणियों में पाया जा सकता है प्रस्तावित डुप्लिकेट। – Dason

उत्तर

6

आप जब अलग-अलग लाइनों को जोड़ने के मूल कथानक में सब कुछ फिट करने के लिए की धुरी सीमा बदलने के लिए की आवश्यकता होगी यह आप के लिए स्वचालित रूप से नहीं किया जाता है:

उदा।

plot (density(MyData$samp1), col="red",ylim=c(0,3.5),xlim=c(-1,2)) 
lines (density(MyData$samp2), col="green") 
lines (density(MyData$samp3), col="blue") 

enter image description here

+0

हां आपकी मदद के लिए बहुत बहुत धन्यवाद। – Letin

2

तुम भी x- और y- अक्ष की सीमा स्वचालित रूप से उत्पन्न कर सकता है:

ranges <- apply(MyData, 2, 
      function(x) { dens <- density(x); c(range(dens$x), range(dens$y)) }) 

plot(density(MyData$samp1), col="red", 
     xlim = range(ranges[1:2, ]), ylim = range(ranges[3:4, ])) 
lines(density(MyData$samp2), col="green") 
lines(density(MyData$samp3), col="blue") 

densities

+0

हाँ इस पर काम करेगा .. आपकी मदद के लिए भी धन्यवाद .. :) – Letin

+2

एक और स्वचालित दृष्टिकोण (आपकी श्रेणियों की गणना करने के बाद) कुछ ऐसा हो सकता है: 'plot (0, type =" n ", xlim = range (श्रेणियां [1: 2,]), ylim = रेंज (श्रेणियां [3: 4,])); COL = इंद्रधनुष (एनकॉल (माईडाटा)); लापरवाही (1: (एनकॉल (माईडाटा)), फ़ंक्शन (एक्स) लाइनें (घनत्व (माईडाटा [, x]), col = COL [x])) '। दूसरे शब्दों में, एक खाली साजिश बनाएं, फिर इस खाली साजिश पर 'लाइनों' प्लॉट करने के लिए 'lapply' का उपयोग करें। – A5C1D2H2I1M1N2O1R2T1

+0

+1 अच्छा विचार, @mrdwab –

4

lattice पैकेज का उपयोग करना (मुझे यकीन है कि एक कर रहा हूँ ggplot2 उदाहरण बहुत पीछे नहीं है), आप densityplot फ़ंक्शन का उपयोग कर सकते हैं:

library(lattice) 
densityplot(~ samp1 + samp2 + samp3, data = myData, auto.key = TRUE) 

enter image description here

या reshape2 पैकेज का उपयोग की साजिश रचने से पहले एक लंबा प्रपत्र में अपना डेटा प्राप्त करने:

library(reshape2) 

myDataM<-melt(myData) 

densityplot(~ value, groups = variable, data = myDataM, auto.key = TRUE) 
+0

हाँ यह अच्छा होगा, ताकि मेरे पास रंग भी स्वचालित हो .. धन्यवाद :) – Letin

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