Domanda

Ho avuto modo di sperimentare con entrambi i ggplot2 e lattice per rappresentare graficamente i pannelli di dati. Sto avendo un po 'di problemi confezionamento mia mente attorno al modello ggplot2. In particolare, come faccio a tracciare un diagramma a dispersione di due serie di dati su ogni pannello:

in lattice avrei potuto fare questo:

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

e che mi avrebbe dato un pannello per ogni State_CD con ogni colonna

Posso fare una colonna con ggplot2:

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

Quello che non riesco Grok è come aggiungere ACTUAL_VALUE al ggplot sopra.

Modifica Hadley ha sottolineato che questo in realtà sarebbe più facile con un esempio riproducibile. Ecco il codice che sembra funzionare. Esiste un modo migliore o più concisa di fare questo con ggplot? Perchè è la sintassi per l'aggiunta di un altro set di punti di ggplot così diverso dal aggiungendo la prima serie di dati?

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")

L'output reticolare simile a questo: alt text
(fonte: cerebralmastication.com )

e ggplot simile a questa: alt text
(fonte: cerebralmastication.com )

È stato utile?

Soluzione

Proprio seguito su quello che Ian ha suggerito: per ggplot2 si vuole veramente tutta la roba asse y in una colonna con un'altra colonna come un fattore che indica come si desidera decorare. E 'facile da fare questo con melt. Vale a dire:

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

Ecco come si presenta per me: alt text
(fonte: princeton.edu )

Per avere un'idea di ciò che sta effettivamente facendo melt, ecco la testa:

> 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

Si vede, si "scioglie" Predicted_value e ACTUAL_VALUE in una colonna chiamata value e aggiunge un'altra colonna chiamata variable ti permette di sapere cosa colonna che proviene.

Altri suggerimenti

Aggiorna : diversi anni ormai, ho quasi sempre utilizzare il metodo di Jonathan (tramite il pacchetto tidyr ) con ggplot2. La mia risposta qui sotto opere in un pizzico, ma ottiene veloce noioso quando si ha 3+ variabili.


Sono sicuro Hadley avrà una risposta migliore, ma - la sintassi è diversa perché la sintassi ggplot(dd,aes()) è (credo) destinato principalmente per tracciare una sola variabile. Per due, vorrei utilizzare:

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)

Tirando la prima serie di punti dei ggplot () dà la stessa sintassi del secondo. Trovo questo più facile da affrontare, perché la sintassi è la stessa e sottolinea la "Grammatica di Grafica", che è al centro di ggplot2.

si potrebbe semplicemente voler cambiare la forma di dati un po ', in modo da avere una variabile dell'asse y, con una variabile ulteriore fattore che indica se si tratta di una variabile previsto o reale.

E 'questo qualcosa di simile a ciò che si sta cercando di fare?

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)

ben dopo la pubblicazione la domanda che mi sono imbattuto in questo R filo Aiuto che potrebbe mi hanno aiutato. Sembra che io possa fare questo:

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

è che un buon modo di fare le cose? E 'strano per me, perché l'aggiunta del secondo elemento ha una sintassi totalmente diverso rispetto al primo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top