2012-07-24 23 views
6

Cuando uso una facet_grid en ggplot2 me gustaría poder tener el valor de la correlación para los datos subconjuntos para cada celda de la cuadrícula en la esquina superior derecha de la gráfica específica.valores de correlación en una cuadrícula de facetas de ggplot2

p. Ej. si se ejecuta:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() 
p + facet_grid(vs ~ am, margins=TRUE) 

Me gustaría ver el valor de la correlación para cada uno de los 9 trazados de la grilla en alguna parte. En este caso específico del ejemplo, esperaría que cada uno esté cerca de -0.9 más o menos de la inspección visual.

O tal vez una tabla de salida para ir con la gráfica que da los valores de correlación para cada una de las celdas de la tabla que coinciden con la facet_grid ... (esto es menos deseable pero también una opción).

Idealmente me gustaría extender esto a cualquier otra función que elija para que pueda usar una o ambas de las dos variables trazadas para calcular estadísticas.

¿Esto es posible?

Gracias de antemano

Respuesta

3

Winston Chang sugirió una respuesta en el grupo ggplot2 ... esto es lo que dijo ... no es una mala respuesta ...

Puede hacer algo como esto:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() 

# Calculate correlation for each group 
cors <- ddply(mtcars, c("vs", "am"), summarise, cor = round(cor(mpg, wt), 2)) 

p + facet_grid(vs ~ am) + 
geom_text(data=cors, aes(label=paste("r=", cor, sep="")), x=30, y=4) 

No creo que sea posible hacer que esto salga correctamente con márgenes = VERDADERO, sin embargo. Si desea los márgenes, es posible que deba preprocesar sus datos para agregar un valor ALL para cada variable de faceta.

-Winston

4

que prefieren añadir un (lineal) más suave a los datos. Le da mucha más información que una correlación.

ggplot(mtcars, aes(mpg, wt)) + 
    geom_smooth(method = "loess", colour = "red", fill = "red") + 
    geom_smooth(method = "lm", colour = "blue", fill = "blue") + 
    geom_point() + facet_grid(vs ~ am, margins=TRUE) 

enter image description here

ggplot(mtcars, aes(mpg, wt)) + geom_smooth(method = "lm") + geom_point() + 
    facet_grid(vs ~ am, margins=TRUE) 

enter image description here

Cuestiones relacionadas