문제

GGPLOT2를 사용하여 에이전트 기반 모델에서 일부 테스트 결과를 탐색하고 있습니다. 이 모델은 실현 당 3 라운드 중 하나로 끝날 수 있으며, 따라서 게임의 라운드가 끝나는 내용과 2D 공간에서의 상대 위치가 다른 방식에 따라 플레이어 유틸리티가 어떻게 다른지에 관심이 있습니다.

이 모든 것은 각 라운드마다 이것을 보여주기 위해 Facet_wrap 플롯을 생성했다고 말하지만, 각 플롯에 각면에 표시된 데이터의 하위 집합에 대해 각 플롯에 COR (x, y)에 주석을 달고 싶습니다. GGPLOT2를 알리는 방법이 있습니까? 여기에 내가 지금까지 가지고있는 코드와 그것이 생산하는 코드입니다.

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
(원천: drewconway.com)

보시다시피 두 가지 문제가 있습니다.

  1. rho 값은 '라운드'에 의한 서브 세트 대신 전체 데이터 세트입니다. 각 플롯에 표시된 데이터만으로 COR (X, Y)이 인쇄 할 수있는 방법이 있습니까?
  2. 주석은 " rho = some_value"를 읽어야하지만 대신 "= ( rho, value); 이것을 고칠 방법이 있습니까?
도움이 되었습니까?

해결책

두 번째 문제를 해결하려면 사용합니다

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

"rho==".

편집하다: 다음은 첫 번째 문제를 해결하기위한 해결책입니다

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)

다른 팁

각면에 세그먼트를 추가하는 것과 동일한 질문이있을 수 있습니다. 우리는 이러한 일반적인 문제를 해결할 수 있습니다 geom_segment 대신에 annotate("segment",...), geom_foo, 우리는 a를 정의 할 수 있습니다 data.frame 데이터를 저장합니다 geom_foo.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top