首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ggplot2中的图例下插入表并将所有内容保存到文件中

在ggplot2中的图例下插入表并将所有内容保存到文件中
EN

Stack Overflow用户
提问于 2013-12-07 04:05:08
回答 1查看 2.3K关注 0票数 2

我有以下要用ggplot2绘制的data.frame:

代码语言:javascript
复制
df = data.frame(mean=c(1.96535,2.133604,1.99303,1.865004,2.181713,1.909511,2.047971,1.676599,2.143763,1.939875,1.816028,1.95465,2.153445,1.802517,2.141799,1.722428),
sd=c(0.0595173,0.03884202,0.0570006,0.04934336,0.04008221,0.05108064,0.0463556,0.06272475,0.04321496,0.05283728,0.05894342,0.05160038,0.04679423,0.05305525,0.04626291,0.0573123),
par=as.factor(c("p","p","m","m","p","p","m","m","m","m","p","p","m","m","p","p")),
group=as.factor(c("iF","iF","iF","iF","iM","iM","iM","iM","RF","RF","RF","RF","RM","RM","RM","RM")),
rep=c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2))

下面是我的代码:

代码语言:javascript
复制
p <- ggplot(df,aes(factor(rep),y=mean,ymin=mean-2*sd,ymax=mean+2*sd,color=factor(par)))
p <- p + geom_pointrange()+facet_wrap(~group, ncol = 4)+scale_color_manual(values = c("blue","red"),labels = c("p","m"),name = "par id")
p <- p + ggtitle("test")
p <- p + labs(y="log(y)",x="rep")

这就产生了这个数字:

我想在下面的图例下面添加这个data.frame:

代码语言:javascript
复制
leg.df = data.frame(statistic = c("pp(par)","pp(g)","pp(s)","fc(p/m)"), value = c(0.96,0.94,0.78,1.5))

我按照下面的stackoverflow thread在ggplot2中的图例下插入了一个表,代码如下:

代码语言:javascript
复制
g_legend <- function(a.gplot){
    tmp <- ggplot_gtable(ggplot_build(a.gplot))
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
    legend <- tmp$grobs[[leg]]
    return(legend)
}
legend <- g_legend(p)
grid.newpage()
vp1 <- viewport(width = 0.75, height = 1, x = 0.375, y = .5)
vpleg <- viewport(width = 0.25, height = 0.5, x = 0.85, y = 0.75)
subvp <- viewport(width = 0.3, height = 0.3, x = 0.85, y = 0.25)
print(p + theme(legend.position = "none"), vp = vp1)
upViewport(0)
pushViewport(vpleg)
grid.draw(legend)
upViewport(0)
pushViewport(subvp)
my_table <- tableGrob(leg.df, gpar.coretext = gpar(fontsize=8), gpar.coltext=gpar(fontsize=8), gpar.rowtext=gpar(fontsize=8), show.rownames = FALSE) 
grid.draw(my_table)

这就产生了我想要的结果:

唯一的问题是我不能让它将所有内容打印到一个文件中。我尝试在整个代码块前面指定pdf(<file>),在它后面指定dev.off(),但似乎不起作用。所以我只能把它打印到R屏幕上。

所以我想我应该以不同的方式处理传奇部分,但我不知道如何处理。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-07 04:48:48

在带有arrangeGrob的链接中使用第二个解决方案

代码语言:javascript
复制
leg.df.grob <-  tableGrob(leg.df, gpar.coretext =gpar(fontsize=8),
         par.coltext=gpar(fontsize=8), 
         gpar.rowtext=gpar(fontsize=8))

### final result
library(gridExtra)
pp <- arrangeGrob(p + theme(legend.position = "none"), 
                  arrangeGrob(leg.df.grob, legend), ncol = 2)

然后您可以使用ggsave进行保存

代码语言:javascript
复制
ggsave('plot.png',pp)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20432635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档