使用 ggplot2 创建 facet_wrap 图,每个图中都有不同的注释 [英] Creating a facet_wrap plot with ggplot2 with different annotations in each plot

查看:43
本文介绍了使用 ggplot2 创建 facet_wrap 图,每个图中都有不同的注释的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 ggplot2 来探索基于代理的模型的一些测试结果.该模型可以在每次实现三轮中的一轮结束,因此我感兴趣的是玩家效用在游戏结束的轮次及其在 2D 空间中的相对位置方面有何不同.

I am using ggplot2 to explore the result of some testing on an agent-based model. The model can end in one of three rounds per realization, and as such I am interested in how player utilities differ in terms of what round the game ends and their relative position in 2D space.

所有这些都是说我已经生成了一个 facet_wrap 图来显示每一轮的这一点,但我还想用 cor(x,y) 注释每个图,用于每个方面表示的数据子集.有没有办法告诉 ggplot2 我希望注释使用 facet_wrap 生成的数据子集?这是我到目前为止的代码,以及它产生的内容

All this is to say that I have generated a facet_wrap plot to show this for each round, but I would also like to annotate each plot with the cor(x,y) for the subset of data represented in each facet. Is there a way to tell ggplot2 that I would like the annotation to use the subset of data generated by facet_wrap? Here is the code I have so far, and what it is producing

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


(来源:drewconway.com)

如您所见,有两个问题:

As you can see, there are two problems:

  1. ho 值是完整数据集的值,而不是round"的子集.有没有办法仅根据每个图中显示的数据打印 cor(x,y) ?
  2. 注释应该是 ho=some_value",但我得到的是=( ho,value);"有没有办法解决这个问题?

推荐答案

解决第二个问题使用

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

"rho==".

这是解决第一个问题的解决方案

Here is a solution to solve the first problem

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)

这篇关于使用 ggplot2 创建 facet_wrap 图,每个图中都有不同的注释的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆