gpt4 book ai didi

r - 将 grid.arrange() 绘图保存到文件

转载 作者:行者123 更新时间:2023-12-02 17:39:52 32 4
gpt4 key购买 nike

我正在尝试使用ggplot2绘制多个图,并使用grid.arrange()排列它们。由于我设法找到了描述我所遇到的确切问题的人,因此我引用了 link 中的问题描述。 :

当我在 grid.arrange() 之后使用 ggsave() 时,即

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

最佳答案

grid.arrange直接在设备上绘制。 arrangeGrob另一方面,不绘制任何内容,但返回一个 grob g ,您可以将其传递给 ggsave(file="whatever.pdf", g) .

它的工作方式与 ggplot 对象不同的原因是 ggplot2 无形地跟踪最新的绘图,我不认为 grid.arrange应该弄乱这个包私有(private)的计数器。

关于r - 将 grid.arrange() 绘图保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059099/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com