2012-09-17 25 views
8

Olası Çoğalt:
How to overlay density plots in R?Tek bir yoğunlukta, düzeltilmiş bir ölçek ile birden fazla çizgi nasıl elde edilir?

Ben, son zamanlarda mikroarray veri setleri ile çalışmaya başladı ve benim sonuç verilerinin dışında bazı araziler yapmak isteyen R. elime çalışıyorum ancak yine de aşağıda takılıyorum.

yaptım ardından

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

Ama bunu yaparken bu, ben

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 

aşağıdaki verileri (myData) sahip Ve ben bunun için bir yoğunluk arsa almak isteyen bana doğru çizimleri vermez, çünkü tüm örnek eğrileri arsa sınırları içine sığmaz. Cevapları aramayı denedim, ama dürüst olmak gerekirse hala bunu başaramıyorum. Ölçekimi yukarıdakiler için nasıl ayarlayacağımı bana yardımcı olabilir misiniz? Ya da yukarıdaki kod için ne ek ek yapmalıyım, böylece tüm eğriler aralık içinde mi? Çok sayıda örneğim var, bu yüzden, her bir örnek için, doğru bir şekilde ölçeklendikten sonra, otomatik olarak farklı bir renk eğrisi atayabilecek bir şeye ihtiyacım var. peşin

Teşekkür ..

+0

önerilen kopya. – Dason

cevap

6

sen her şeyi sığdırmak için orijinal planın ekseni sınırlarını değiştirmek gerekecektir Bu sizin için otomatik yapılmazsa farklı çizgiler eklerken:.

örn

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

Evet, yardımlarınız için çok teşekkür ederim. – Letin

2

Ayrıca otomatik x ve y ekseni sınırlarını oluşturabilir:

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

Evet, üzerinde çalışacağım .. yardımınız için teşekkürler .. :) – Letin

+2

Daha otomatik bir yaklaşım (aralıklarınızı hesapladıktan sonra) şöyle bir şey olabilir: arsa (0, type = "n", xlim = range (aralıklar [1: 2,]), ylim = aralık (aralıklar [3: 4,])); COL = gökkuşağı (ncol (MyData)); lapply (1: (ncol (MyData)), işlev (x) çizgileri (yoğunluk (MyData [, x]), col = COL [x])). Başka bir deyişle, boş bir arsa oluşturun, daha sonra bu boş arsada 'çizgilerini çiz' için "lapply" yi kullanın. – A5C1D2H2I1M1N2O1R2T1

+0

+1 İyi fikir, @mrdwab –

4

lattice paketini kullanarak (ben eminim ggplot2 örnek çok uzak değil), densityplot işlevini kullanabilirsiniz:

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

enter image description here

Ya komplo önce uzun boylu forma veri almak için reshape2 paketini kullanın:

sorunun cevabı kabul cevaba yorumlarda bulunabilir
library(reshape2) 

myDataM<-melt(myData) 

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

evet bu iyi olurdu, ben de otomatik olarak renkleri var .. Teşekkür ederim :) – Letin