studio - superponer graficas en r ggplot
Creación de un gráfico facet_wrap con ggplot2 con diferentes anotaciones en cada gráfico (2)
Para solucionar el segundo problema de uso.
annotate("text", 0.375, -1.25,
label=paste("rho==", round(cor(abm.data$area, abm.data$U1_2), 2)),
parse=TRUE)
es decir, "rho=="
.
Edit: Aquí hay una solución para resolver el primer problema.
library("plyr")
library("ggplot2")
set.seed(1)
df <- data.frame(x=rnorm(300), y=rnorm(300), cl=gl(3,100)) # create test data
df.cor <- ddply(df, .(cl), function(val) sprintf("rho==%.2f", cor(val$x, val$y)))
p1 <- ggplot(data=df, aes(x=x)) +
geom_point(aes(y=y, colour="col1", alpha=0.4)) +
facet_wrap(~ cl, ncol=3) +
geom_text(data=df.cor, aes(x=0, y=3, label=V1), parse=TRUE) +
scale_colour_manual(values=c("col1"="red")) +
opts(legend.position="none")
print(p1)
Estoy usando ggplot2 para explorar el resultado de algunas pruebas en un modelo basado en agentes. El modelo puede terminar en una de tres rondas por realización, y como tal, estoy interesado en cómo las utilidades de los jugadores difieren en cuanto a qué ronda termina el juego y su posición relativa en el espacio 2D.
Todo esto es para decir que he generado un gráfico facet_wrap para mostrar esto para cada ronda, pero también me gustaría anotar cada gráfico con el cor (x, y) para el subconjunto de datos representados en cada faceta. ¿Hay alguna manera de decirle a ggplot2 que me gustaría que la anotación use el subconjunto de datos generados por facet_wrap? Aquí está el código que tengo hasta ahora, y lo que está produciendo.
library(ggplot2)
# Load data
abm.data<-read.csv("ABM_results.csv")
# Create new colun for area of Pareto set
attach(abm.data)
area<-abs(((x3*(y2-y1))+(x2*(y1-y3))+(x1*(y3-y2)))/2)
abm.data<-transform(abm.data,area=area)
detach(abm.data)
# Compare area of Pareto set with player utility
png("area_p1.png",res=100,pointsize=20,height=500,width=1600)
area.p1<-ggplot(abm.data,aes(x=area))+geom_point(aes(y=U1_2,colour="Player 1",alpha=0.4))+facet_wrap(~round,ncol=3)+
annotate("text",0.375,-1.25,label=paste("rho=",round(cor(abm.data$area,abm.data$U1_2),2)), parse=TRUE)+
scale_colour_manual(values=c("Player 1"="red"))
area.p1+xlab("Area of Pareto Set")+ylab("Player Utility at Game End")+
opts(title="Final Player 1 Utility by Pareto Set Size and Round Game Ends",legend.position="none")
dev.off()
area_p1 http://www.drewconway.com/zia/wp-content/uploads/2010/01/area_p1.png
Como puedes ver, hay dos problemas:
- El valor de / rho es del conjunto de datos completo, en lugar de los subconjuntos por "redondeo". ¿Hay alguna manera de hacer que el cor (x, y) se imprima basándose solo en los datos que se muestran en cada gráfico?
- La anotación debe leer "/ rho = some_value" pero en su lugar me aparece "= (/ rho, value);" ¿Hay una manera de arreglar esto?
Se puede hacer la misma pregunta para agregar segmentos para cada faceta. Podemos resolver estos problemas generales mediante geom_segment
lugar de annotate("segment",...)
, para geom_foo
, podemos definir un data.frame
para almacenar los datos para geom_foo
.