Plotten zwei Vektoren von Daten auf einem ggplot2 Streudiagramm unter Verwendung von R

StackOverflow https://stackoverflow.com/questions/1313954

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe mit beiden ggplot2 und lattice experimentiert Platten von Daten grafisch darzustellen. Ich habe ein wenig Mühe meinen Verstand um das ggplot2 Modell wickeln. Insbesondere wie plotten ich ein Streudiagramm mit zwei Sätzen von Daten auf jeder Platte:

in lattice kann ich dies tun:

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

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

ich eine Spalte mit ggplot2 tun können:

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

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

Bearbeiten Hadley wies darauf hin, dass dies wirklich mit einem reproduzierbaren Beispiel wäre einfacher. Hier ist Code, der zu funktionieren scheint. Gibt es eine bessere oder prägnante Weise, dies mit ggplot zu tun? Warum ist die Syntax für einen anderen Satz von Punkten Zugabe so unterschiedlich ggplot aus der Addition des ersten Satzes von 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
(Quelle: cerebralmastication.com )

und ggplot sieht wie folgt aus: alt text
(Quelle: cerebralmastication.com )

War es hilfreich?

Lösung

Just Follow-up auf, was Ian vorgeschlagen: für ggplot2 Sie wirklich alle wollen die y-Achse Sachen in einer Spalte mit einer anderen Spalte als Faktor angibt, wie Sie es wollen dekorieren. 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
(Quelle: princeton.edu )

Um eine Vorstellung davon zu bekommen, welche 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 „schmilzt“ Predicted_value und ACTUAL_VALUE in eine Spalte namens value und fügt eine weitere Spalte namens variable lassen Sie wissen, welche Spalte es ursprünglich herkommt.

Andere Tipps

Aktualisieren : mehrere Jahre jetzt, verwende ich fast immer Jonathans Methode (über die tidyr Paket ) mit ggplot2. Meine Antwort unten Werke in eine Prise, aber bekommt langweilig schnell, wenn Sie 3 + Variablen haben.


Ich bin sicher, dass Hadley eine bessere Antwort hat, aber - die Syntax ist anders, weil die ggplot(dd,aes()) Syntax ist (glaube ich) in erster Linie nur eine Variable für das Plotten vorgesehen. 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)

, um den ersten Satz von Punkten Ziehen aus dem ggplot () gibt es die gleiche Syntax wie die zweite. Ich finde diese einfacher zu handhaben, da die Syntax gleich ist und es betont die „Grammatik der Grafik“, die den Kern der ggplot2 ist.

Sie wollen einfach nur die Form Ihrer Daten ein wenig zu ändern, so dass Sie den y-Achsen-Variable haben, mit einem zusätzlichen Faktor Variable, die angibt, ob es sich um eine vorhergesagte oder tatsächliche Variable ist.

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

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)

auch nach der Frage Entsendung ich lief über diese R Hilfe Thread die mir geholfen haben kann. Es sieht aus wie kann ich dies tun:

 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 kommt mir seltsam, weil das zweite Element hinzugefügt hat eine ganz andere Syntax als die erste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top