将grid.arrange()图保存到文件
我正在尝试使用ggplot2
绘制多个图,并使用grid.arrange()
来排列它们。 由于我设法找到描述我确切问题的人,所以我从链接引用了问题描述:
当我在ggsave()
之后使用grid.arrange()
,即
grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
ggsave("sgcirNIR.jpg")
我不保存网格图,而是保存最后一个单独的ggplot。 有没有什么方法可以通过grid.arrange()
使用ggsave()
或类似的东西来显示实际上保存的绘图? 除了使用旧的方式
jpeg("sgcirNIR.jpg")
grid.arrange(sgcir1,sgcir2,sgcir3,ncol=2,nrow=2)
dev.off()
相同的链接给出了下面的解决方案:
require(grid)
require(gridExtra)
p <- arrangeGrob(qplot(1,1), textGrob("test"))
grid.draw(p) # interactive device
ggsave("saving.pdf", p) # need to specify what to save explicitly
然而,我不知道如何使用ggsave()
来保存grid.arrange()
调用的输出,下面的代码是从链接中获取的:
library(ggplot2)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]
p1 <- qplot(carat, price, data=dsamp, colour=clarity)
p2 <- qplot(carat, price, data=dsamp, colour=clarity, geom="path")
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(p1)
lwidth <- sum(legend$width)
## using grid.arrange for convenience
## could also manually push viewports
grid.arrange(arrangeGrob(p1 + theme(legend.position="none"),
p2 + theme(legend.position="none"),
main ="this is a title",
left = "This is my global Y-axis title"), legend,
widths=unit.c(unit(1, "npc") - lwidth, lwidth), nrow=1)
# What code to put here to save output of grid.arrange()?
grid.arrange
直接在设备上绘制。 另一方面, arrangeGrob
不会绘制任何内容,而是返回一个grob g
,您可以传递给ggsave(file="whatever.pdf", g)
。
它与ggplot对象不同的原因不同,默认情况下,如果未指定,最后一个绘图将被保存,因为ggplot2无形地跟踪最新的绘图,并且我不认为grid.arrange
应该grid.arrange
这个专用于包裹。
我对babptiste的建议有些问题,但最终得到了答案。 以下是您应该使用的内容:
# draw your plots
plot1 <- ggplot(...) # this specifies your first plot
plot2 <- ggplot(...) # this specifies your second plot
plot3 <- ggplot(...) # this specifies your third plot
#merge all three plots within one grid (and visualize this)
grid.arrange(plot1, plot2, plot3, nrow=3) #arranges plots within grid
#save
g <- arrangeGrob(plot1, plot2, plot3, nrow=3) #generates g
ggsave(file="whatever.pdf", g) #saves g
这应该很好。
另一种将grid.arrange保存为pdf文件的简单方法是使用pdf():
pdf("filename.pdf", width = 8, height = 12) # Open a new pdf file
grid.arrange(plot1, plot2, plot3, nrow=3) # Write the grid.arrange in the file
dev.off() # Close the file
它允许合并除ggplots之外的其他东西,比如表格...
链接地址: http://www.djcxy.com/p/30871.html上一篇: Saving grid.arrange() plot to file
下一篇: Specify the colour of ggpairs plot using a variable but not plot that variable