我正在尝试使用绘制多个图,使用来ggplot2
排列它们grid.arrange()
。由于我设法找到描述我所遇到的确切问题的人,因此引用了链接中的问题描述:
当我使用ggsave()
after 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()
调用的输出,该代码取自link:
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()?
print(ggplot())
吗
ggplot
使用ggsave()
,图像的分辨率要高得多。有没有一种方法可以保存grid.arrange()
高分辨率的输出,就像保存单个绘图一样ggsave()
?例如,如果我提供选项,png(...,height=1600, width=2500)
则图像看起来非常模糊。
png(); grid.arrange(); ggplot(); ggplot(); dev.off()