2012-09-17 5 views
8

Mögliche Duplizieren:
How to overlay density plots in R?Wie erhält man mehrere Linien in einem einzigen Dichtediagramm mit einer korrigierten Skala?

Ich habe vor kurzem angefangen mit Microarray-Datensätze arbeiten und ich versuche, meine Hände auf R. ich bekommen möchten einige Diagramme aus meiner Ergebnisdaten machen, aber wie auch immer, ich bleibe bei dem folgenden stecken.

Ich habe folgende Daten (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 

Und ich wünsche eine Dichte-Plot für diese zu erhalten,

Ich habe die folgende,

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

Aber dies zu tun gibt mir keine richtigen Plots, weil nicht alle Sample-Kurven innerhalb der Plot-Grenzen liegen. Ich habe versucht, nach Antworten zu suchen, aber ehrlich gesagt kann ich das immer noch nicht herausfinden. Können Sie mir helfen zu wissen, wie setze ich meine Skala für die oben genannten? Oder was soll ich zusätzlich zum obigen Code tun, damit alle Kurven in Reichweite sind ?? Ich habe viele Samples, also brauche ich etwas, das auch automatisch eine andere Farbkurve für jedes Sample zuweist, nachdem ich es richtig skaliert habe.

Vielen Dank im Voraus ..

+0

Die Antwort auf die Frage in den Kommentaren der akzeptierte Antwort in die gefunden werden vorgeschlagenes Duplikat. – Dason

Antwort

6

Sie die Achse Grenzen des ursprünglichen Plot ändern müssen alles in fit Dies ist nicht automatisch für Sie erledigt ist, wenn verschiedene Linien ergänzt:.

z.B.

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

Ja vielen Dank für Ihre Hilfe. – Letin

2

Sie könnten auch die Grenzen der x- und y-Achse automatisch erzeugen:

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

Ja, ich werde daran arbeiten .. danke auch Ihnen für Ihre Hilfe .. :) – Letin

+2

Ein automatisierter Ansatz (nach der Berechnung Ihrer Bereiche) könnte etwa so aussehen: 'plot (0, type =" n ", xlim = Bereich (Bereiche [1: 2,]), ylim = Bereich (Bereiche [3: 4,])); COL = Regenbogen (ncol (MyData)); lapply (1: (ncol (MyData)), Funktion (x) Linien (Dichte (MyData [, x]), col = COL [x])). Mit anderen Worten, erstellen Sie ein leeres Plot und verwenden Sie dann 'lapply', um' Linien' auf diesem leeren Plot zu zeichnen. – A5C1D2H2I1M1N2O1R2T1

+0

+1 Gute Idee, @mrdwab –

4

Mit dem lattice Paket (ich bin sicher ein ggplot2 Beispiel ist nicht weit hinter), könnten Sie die densityplot Funktion verwenden:

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

enter image description here

Oder verwenden Sie die reshape2 Paket Ihre Daten in eine hohe Form zu erhalten, bevor Plotten:

library(reshape2) 

myDataM<-melt(myData) 

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

ja das wäre gut, so dass ich auch die Farben automatisch haben .. Danke :) – Letin

Verwandte Themen