gpt4 book ai didi

r - 使用 ggplot_build 和 ggplot_gtable 后使用 ggsave 保存图形

转载 作者:行者123 更新时间:2023-12-04 00:27:37 26 4
gpt4 key购买 nike

我正在通过更改 ggplot_build 生成的数据来修改使用 ggplot 构建的图形(原因类似于 Include space for missing factor level used in fill aesthetics in geom_boxplot)。据我了解我在这个主题上找到的帮助,我应该能够在对结果( Saving grid.arrange() plot to file )调用 ggsave 之前通过应用 ggplot_gtable 和arrangeGrob 来保存结果。

但是我得到一个错误“情节应该是一个ggplot2情节”,还有这个简单的可复制示例:

require('ggplot2')
require('gridExtra')
df <- data.frame(f1=factor(rbinom(100, 1, 0.45), label=c("m","w")),
f2=factor(rbinom(100, 1, 0.45), label=c("young","old")),
boxthis=rnorm(100))
g <- ggplot(aes(y = boxthis, x = f2, fill = f1), data = df) + geom_boxplot()
dd <- ggplot_build(g)

# Printing the graph works:
print(arrangeGrob(ggplot_gtable(dd)))

# Saving the graph doesn't:
ggsave('test.png',arrangeGrob(ggplot_gtable(dd)))

任何人都可以解释为什么这不起作用?有没有办法在使用 ggplot_build() 修改数据后使用 ggsave ?

(我的软件包版本是 gridExtra_0.9.1 和 ggplot2_0.9.3.1)

最佳答案

它不起作用,因为 ggsave想要一个类 ggplot 的对象,当你经过一个格罗布时。 arrangeGrob有时会骗ggsave假装继承自 ggplot ,但仅当至少有一个 grob 属于此类时;然而,在这里,您只传递了一个 gtable .

也许最简单的解决方法是克隆 ggsave 并绕过类检查,

ggsave <- ggplot2::ggsave; body(ggsave) <- body(ggplot2::ggsave)[-2]

编辑: ggplot2 的开发版本不再需要这个 hack*,如 ggsave now works with any grob .

*PS:这个 hack 不再起作用,因为arrangeGrob 现在返回一个 gtable,并且它的打印方法不在设备上绘制。

关于r - 使用 ggplot_build 和 ggplot_gtable 后使用 ggsave 保存图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406991/

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