Pregunta

He estado experimentando con ambos ggplot2 y lattice para graficar paneles de datos.Estoy teniendo algunos problemas para entender ggplot2 modelo.En particular, ¿cómo puedo trazar un diagrama de dispersión con dos conjuntos de datos en cada panel?

en lattice Yo podría hacer esto:

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

y eso me daría un panel para cada State_CD con cada columna

Puedo hacer una columna con ggplot2:

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

Lo que no puedo asimilar es cómo agregar Actual_value al ggplot anterior.

EDITAR Hadley señaló que esto realmente sería más fácil con un ejemplo reproducible.Aquí hay un código que parece funcionar.¿Existe una forma mejor o más concisa de hacer esto con ggplot?¿Por qué la sintaxis para agregar otro conjunto de puntos a ggplot es tan diferente a la de agregar el primer conjunto de datos?

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 salida de la red se ve así:alt text
(fuente: cerebralmastication.com)

y ggplot se ve así:alt text
(fuente: cerebralmastication.com)

¿Fue útil?

Solución

Simplemente siguiendo lo que sugirió Ian:para ggplot2 realmente quieres todo el material del eje y en una columna con otra columna como factor que indica cómo quieres decorarlo.Es fácil hacer esto con melt.Esto es:

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

Esto es lo que me parece:alt text
(fuente: princeton.edu)

Para tener una idea de lo que melt lo que realmente está haciendo, aquí está el encabezado:

> 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

Verá, "funde" Valor_predicho y Valor_real en una columna llamada value y agrega otra columna llamada variable informándole de qué columna proviene originalmente.

Otros consejos

Actualizar : varios años ya, que casi siempre se utiliza el método de Jonathan (a través de la paquete tidyr) con ggplot2. Mi respuesta a continuación las obras en caso de necesidad, pero se hace tediosa rápido cuando se tiene más de 3 variables.


Estoy seguro de Hadley tendrá una mejor respuesta, pero - la sintaxis es diferente porque la sintaxis ggplot(dd,aes()) es (creo) destinado principalmente para el trazado de una sola variable. Para dos, me gustaría utilizar:

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 del primer conjunto de puntos de la ggplot () le da la misma sintaxis que la segunda. Me parece más fácil de tratar porque la sintaxis es la misma y se hace hincapié en la "Gramática de gráficos" que está en el centro de ggplot2.

es posible que quieran cambiar la forma de sus datos un poco, para que tenga una variable eje y, con una variable de factor adicional que indica si es una variable previsto o real.

Es esto algo parecido a lo que usted está tratando de hacer?

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 después de la publicación de la pregunta que me encontré con este hilo de Ayuda R que pueden me han ayudado. Parece que puedo hacer esto:

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

es que una buena manera de hacer las cosas? Es extraño para mí, porque la adición del segundo elemento tiene una sintaxis totalmente diferente a la primera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top