traçant deux vecteurs de données sur un diagramme de dispersion de ggplot2 en utilisant R

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

  •  19-09-2019
  •  | 
  •  

Question

J'ai expérimenté à la fois ggplot2 et lattice pour représenter graphiquement des panneaux de données. Je vais avoir un peu de mal envelopper mon esprit autour du modèle de ggplot2. En particulier, comment tracer un diagramme de dispersion avec deux ensembles de données sur chaque panneau:

lattice que je pouvais faire ceci:

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

et cela me donnerait un panneau pour chaque State_CD chaque colonne

Je peux faire une colonne avec ggplot2:

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

Ce que je ne peux pas grok est de savoir comment ajouter ACTUAL_VALUE au ggplot ci-dessus.

EDIT Hadley a souligné que ce serait vraiment plus facile avec un exemple reproductible. Voici le code qui semble fonctionner. Y at-il une façon meilleure ou plus concise de le faire avec ggplot? Pourquoi la syntaxe pour ajouter une autre série de points à ggplot si différent d'ajouter le premier ensemble de données?

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

La sortie du réseau ressemble à ceci: text alt
(source: cerebralmastication.com )

et ggplot ressemble à ceci: text alt
(source: cerebralmastication.com )

Était-ce utile?

La solution

Pour faire suite à ce que Ian a suggéré: pour ggplot2 vous voulez vraiment tous les trucs y axe dans une colonne avec une autre colonne comme un facteur indiquant la façon dont vous voulez décorer. Il est facile de le faire avec melt. À savoir:

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

Voici à quoi il ressemble pour moi: text alt
(source: princeton.edu )

Pour avoir une idée de ce que melt est en train de faire, voici la tête:

> 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

Vous voyez, ce « fond » et Predicted_value ACTUAL_VALUE dans une colonne appelée value et ajoute une autre colonne appelée variable vous permettant de savoir quelle colonne il est originaire de.

Autres conseils

Mise à jour : plusieurs années maintenant, je l'utilise presque toujours la méthode de Jonathan (via paquet tidyr ) avec ggplot2. Ma réponse ci-dessous fonctionne dans un pincement, mais devient vite fastidieux lorsque vous avez des variables 3+.


Je suis sûr que Hadley aura une meilleure réponse, mais - la syntaxe est différente, car la syntaxe ggplot(dd,aes()) est (je pense) principalement destiné à tracer une seule variable. Pour deux, je voudrais utiliser:

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)

En tirant le premier ensemble de points sur la ggplot () donne la même syntaxe que la seconde. Je trouve cela plus facile à traiter parce que la syntaxe est la même et il met l'accent sur la « grammaire de Graphics » qui est au cœur de ggplot2.

vous pourriez vouloir changer la forme de vos données un peu, de sorte que vous avez une variable ordonnée, avec une variable de facteur supplémentaire indiquant si elle est une variable prévue ou réelle.

Est-ce quelque chose comme ce que vous essayez de faire?

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)

bien après avoir affiché la question que je courais à travers cette R Aide fil qui m'a peut-être aidé. On dirait que je peux faire ceci:

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

est qu'une bonne façon de faire les choses? Il étrange pour moi parce que l'ajout du deuxième élément a une syntaxe totalement différente de la première.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top