2009-08-21 8 views
18

Ich habe mit ggplot2 und lattice experimentiert, um Datenfelder zu zeichnen. Ich habe ein paar Probleme mit dem Modell ggplot2. Insbesondere wie plotte ich ein Streudiagramm mit zwei Sätzen von Daten auf jeder Platte:Zeichnen von zwei Vektoren von Daten auf einem GGPLOT2 Streudiagramm mit R

in lattice ich dies tun könnte:

xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd) 

und das würde mir mit jeder Spalte eine Platte für jede staat_code geben

ich kann mit ggplot2 eine Spalte tun:

pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) 
     + facet_wrap(~ State_CD) + opts(aspect.ratio = 1) 
print(pg) 

Was ich nicht verstehen kann, ist, wie ACTUAL_VALUE zum ggplot oben hinzuzufügen.

EDIT Hadley wies darauf hin, dass dies mit einem reproduzierbaren Beispiel wirklich einfacher wäre. Hier ist Code, der zu funktionieren scheint. Gibt es einen besseren oder prägnanteren Weg, dies mit ggplot zu tun? Warum unterscheidet sich die Syntax zum Hinzufügen einer anderen Menge von Punkten von ggplot so stark von der ersten Menge an Daten?

library(lattice) 
library(ggplot2) 

#make some example data 
dd<-data.frame(matrix(rnorm(108),36,3),c(rep("A",24),rep("B",24),rep("C",24))) 
colnames(dd) <- c("Predicted_value", "Actual_value", "x_value", "State_CD") 

#plot with lattice 
xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd) 

#plot with ggplot 
pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) + facet_wrap(~ State_CD) + opts(aspect.ratio = 1) 
print(pg) 

pg + geom_point(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green") 

Die Gitter Ausgabe sieht wie folgt aus: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/lattice.png

und ggplot sieht wie folgt aus: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/ggplot.png

+0

Es wäre viel einfacher, Vorschläge anzubieten, wenn Sie ein reproduzierbares Beispiel liefern würden – hadley

+0

ja, das ist ein guter Punkt. Es war faul von mir, kein vollständiges Beispiel zu erstellen. Ich werde versuchen, etwas aufzuarbeiten. –

Antwort

19

Ich folge nur dem, was Ian vorgeschlagen hat: Für ggplot2 möchten Sie wirklich alle Y-Achsen-Sachen in einer Spalte mit einer anderen Spalte als einen Faktor angeben, wie Sie es dekorieren möchten. Es ist einfach, dies mit melt zu tun. Nämlich:

qplot(x_value, value, 
     data = melt(dd, measure.vars=c("Predicted_value", "Actual_value")), 
     colour=variable) + facet_wrap(~State_CD) 

Hier ist, wie es für mich aussieht: alt text http://www.cs.princeton.edu/~jcone/example.png

Um eine Vorstellung davon zu bekommen, was melt tatsächlich tun, hier ist der Kopf:

> head(melt(dd, measure.vars=c("Predicted_value", "Actual_value"))) 
    x_value State_CD  variable  value 
1 1.2898779  A Predicted_value 1.0913712 
2 0.1077710  A Predicted_value -2.2337188 
3 -0.9430190  A Predicted_value 1.1409515 
4 0.3698614  A Predicted_value -1.8260033 
5 -0.3949606  A Predicted_value -0.3102753 
6 -0.1275037  A Predicted_value -1.2945864 

Sie sehen, es "Meldet" Predicted_value und Actual_value in eine Spalte mit der Bezeichnung value und fügt eine weitere Spalte namens variable hinzu, die Sie darüber informiert, aus welcher Spalte sie ursprünglich stammt.

1

auch nach der Frage Entsendung ich auf this R Help thread lief die mir geholfen haben kann. Es sieht aus wie ich das tun kann:

pg + geom_line(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green") 

ist, dass eine gute Art und Weise, Dinge zu tun? Es ist seltsam für mich, weil das Hinzufügen des zweiten Elements eine völlig andere Syntax als die erste hat.

+0

Beachten Sie, dass Sie nur die Standardeinstellungen ändern müssen, die Sie im Abschnitt ggplot() festgelegt haben. In diesem Fall müssen Sie nur den neuen y-Wert und die Farbe festlegen. ggplot (dd, aes (x = x_wert, y = Vorhergesagter_wert)) + geom_point (form = 2) + facet_wrap (~ Zustand_CD) + opts (aspect.ratio = 1) + geom_line (aes (yAktueller_wert, color = "grün ") – Thierry

2

Sie möchten vielleicht nur die Form Ihrer Daten etwas ändern, so dass Sie eine Y-Achsenvariable haben, mit einer zusätzlichen Faktorvariablen, die anzeigt, ob es sich um eine vorhergesagte oder tatsächliche Variable handelt.

Ist das etwas wie das, was Sie versuchen zu tun?

dd<-data.frame(type=rep(c("Predicted_value","Actual_value"),20),y_value=rnorm(40), 
       x_value=rnorm(40),State_CD=rnorm(40)>0) 
qplot(x_value,y_value,data=dd,colour=type,facets=.~State_CD) 
+0

ahhh .. Ich denke, das ist, was die Beispiele in der ggplot docs tun. Das hilft sicherlich mein Denken –

6

aktualisieren: mehrere Jahre jetzt, verwende ich Jonathans Verfahren fast immer (über die tidyr package) mit ggplot2. Meine Antwort unten funktioniert in einer Prise, wird aber schnell langweilig, wenn Sie 3 Variablen haben.


Ich bin sicher, dass Hadley eine bessere Antwort haben, aber - die Syntax ist anders, weil die ggplot(dd,aes()) Syntax ist (glaube ich) in erster Linie für das Plotten nur eine Variable. Für zwei, würde ich verwenden:

ggplot() + 
geom_point(data=dd, aes(x_value, Actual_value, group=State_CD), colour="green") + 
geom_point(data=dd, aes(x_value, Predicted_value, group=State_CD), shape = 2) + 
facet_wrap(~ State_CD) + 
theme(aspect.ratio = 1) 

den ersten Satz von Punkten aus dem ggplot Pulling() gibt es die gleiche Syntax wie die zweite. Ich finde das leichter zu handhaben, weil die Syntax die gleiche ist und betont die "Grammatik der Grafik", die den Kern von ggplot2 bildet.

+0

@MichaelChirico In der Tat!' Aspect.ratio' ist jetzt in der 'theme()' Funktion. Antwort aktualisiert - danke für darauf hinweisen. –