Erstellen eines facet_wrap Grundstück mit ggplot2 mit verschiedenen Anmerkungen in jeder Parzelle

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

  •  20-09-2019
  •  | 
  •  

Frage

Ich verwende ggplot2 das Ergebnis eines Tests auf einem agentenbasierten Modell zu erkunden. Das Modell kann in einem von drei Runden pro Realisierung beenden, und als solche bin ich daran interessiert, wie Spieler Dienstprogramme unterscheiden sich in Hinblick darauf, was runden das Spiel endet, und ihre relative Position im 2D-Raum.

All dies ist zu sagen, dass ich einen facet_wrap Plot erzeugt habe dies für jede Runde zu zeigen, aber ich würde wie auch jede Handlung mit der cor (x, y) für die Teilmenge der Daten in jeder Facette dargestellt mit Anmerkungen versehen. Gibt es eine Möglichkeit ggplot2 zu sagen, dass ich die Anmerkung möchte die Teilmenge der Daten, die von facet_wrap erzeugt zu benutzen? Hier ist der Code Ich habe so weit, und was es produziert

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


(Quelle: drewconway.com )

Wie Sie sehen können, gibt es zwei Probleme:

  1. Der \ rho-Wert des vollständigen Datensatz, anstatt die Subsets von ‚rund‘. Gibt es eine Möglichkeit, die cor zu bekommen (x, y) auf der Grundlage drucken nur die in jeder Parzelle gezeigten Daten?
  2. Die Anmerkung sollte "\ rho = some_value" lesen, aber ich stattdessen bekommen "= (\ rho, value);" gibt es eine Möglichkeit, dies zu beheben?
War es hilfreich?

Lösung

das zweite Problem zu beheben Verwendung

annotate("text", 0.375, -1.25,
         label=paste("rho==", round(cor(abm.data$area, abm.data$U1_2), 2)),
         parse=TRUE)

d. "rho==".

Edit: Hier ist eine Lösung, die das erste Problem zu lösen

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)

Andere Tipps

Die gleiche Frage kann wie für das Hinzufügen von Segmenten für jede Facette gefragt. Wir können diese allgemeinen Probleme von geom_segment statt annotate("segment",...), für die geom_foo lösen, haben wir eine data.frame definieren können die Daten für die geom_foo zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top