varias studio residuales matriz graficos grafico graficas ggplot dispersion diagrama r plot ggplot2 lattice

residuales - matriz de dispersion en r studio



trazando dos vectores de datos en un diagrama de dispersiĆ³n GGPLOT2 usando R (4)

He estado experimentando tanto con ggplot2 como con lattice para graficar paneles de datos. Estoy teniendo problemas para envolver mi mente alrededor del modelo ggplot2 . En particular, ¿cómo puedo trazar un diagrama de dispersión con dos conjuntos de datos en cada panel:

en lattice 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í está el código que parece funcionar. ¿Hay una manera 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 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 celosía se ve así: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/lattice.png

y ggplot se ve así: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/ggplot.png


Bueno, después de publicar la pregunta, me encontré con este hilo de Ayuda R que me puede haber ayudado. Parece que puedo hacer esto:

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

¿Es esa una buena manera de hacer las cosas? Me resulta extraño porque agregar el segundo elemento tiene una sintaxis totalmente diferente a la primera.


Simplemente haciendo un seguimiento de lo que Ian sugirió: 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 parece para mí: texto alternativo http://www.cs.princeton.edu/~jcone/example.png

Para tener una idea de lo que realmente hace melt , aquí está la cabeza:

> 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

Usted ve, "funde" Predicted_value y Actual_value en una columna llamada value y agrega otra columna llamada variable que le permite saber de qué columna provino originalmente.


es posible que solo desee cambiar un poco la forma de sus datos, de modo que tenga una variable del eje y, con una variable de factor adicional que indique si es una variable pronosticada o real.

¿Es esto algo como lo que estás 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)


Actualización : varios años después, casi siempre uso el método de Jonathan (a través del paquete tidyr ) con ggplot2. Mi respuesta a continuación funciona en caso de apuro, pero se vuelve tedioso cuando tienes más de 3 variables.

Estoy seguro de que Hadley tendrá una mejor respuesta, pero - la sintaxis es diferente porque la ggplot(dd,aes()) es (creo) principalmente diseñada para trazar una sola variable. Para dos, yo usaría:

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)

Al extraer el primer conjunto de puntos del ggplot () se obtiene la misma sintaxis que el segundo. Encuentro esto más fácil de tratar porque la sintaxis es la misma y enfatiza la "Gramática de los Gráficos" que está en el núcleo de ggplot2.