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

不要惊慌

我正在通过更改ggplot_build生成的数据来修改由ggplot构建的图形(原因类似于在geom_boxplot中用于填充美学的“包含缺少的因子水平的空间”)。据我了解到的有关该主题的帮助,我应该能够通过在调用ggsave之前将ggplot_gtable和rangingGrob应用于保存结果(将grid.arrange()图保存到file)。

但是,通过这个简单的可复制示例,我得到一个错误“图应为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)

浸礼会

它不起作用,因为在传递grob时需要ggsaveclass类的对象ggplotarrangeGrob有时会ggsave假装从继承ggplot,但仅当至少一个grob属于此类时才会欺骗;但是,在这里,您只传递了gtable

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

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

编辑: ggplot2的开发版本不再需要此hack *,因为ggsave 现在可以与任何grob一起使用

* PS:该hack不再起作用,因为rangingGrob现在返回一个gtable,并且其打印方法无法在设备上绘制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:gtable和ggplot对象之间的可靠转换。ggplot_build()之后如何使Lemon :: reposition_legend()工作?

来自分类Dev

使用ggsave(ggplot2)将ggplot用不同的文件格式保存两次

来自分类Dev

使用ggplot绘制多个图形

来自分类Dev

使用ggplot2的图形

来自分类Dev

使用 ggplot 和 marrangeGrob 在多个页面上绘制多个图形

来自分类Dev

用grid和gtable拆除ggplot

来自分类Dev

ggplot中的ggsave()用于python不保存

来自分类Dev

R:是否可以从使用grid.arrange和ggplot创建的gtable对象中提取原始数据?

来自分类Dev

将ggplot与图形功能配合使用

来自分类Dev

如何使用ggplot删除图形中的空间

来自分类Dev

将gridExtra更新为2.0.0后使用ggsave和rangingGrob

来自分类Dev

使用功能保存ggplot

来自分类Dev

使用gtable排列ggplot图(宽度相同的小块)以创建2x2布局

来自分类Dev

替换gtable中ggplot的元素:标签和网格线

来自分类Dev

C#和R.Net不使用ggplot2显示任何图形

来自分类Dev

ggplot2和Shiny:如何使用图形大小缩放图例的大小?

来自分类Dev

ggplot,同时使用vjust和hjust为同一图形,如何代码呢?

来自分类Dev

将大括号添加到ggplot2,然后使用ggsave

来自分类Dev

如何在要在 ggplot2 图形中使用的表达式()中包含带有保存文本的对象?

来自分类Dev

错误没有适用于“ ggplot_build”的适用于“网格”类对象的方法

来自分类Dev

在ggplot图形中使用unicode字符的舒适方法

来自分类Dev

如何使用ggplot2清理数据并创建图形?

来自分类Dev

在R中使用ggplot的这种图形的语法是什么?

来自分类Dev

如何在R中使用ggplot绘制图形

来自分类Dev

使用多个方面播放 ggplot2 的图形

来自分类Dev

如何使用 geom_bar 优化图形 ggplot

来自分类Dev

使用ggplot2对两个不同几何图形进行“着色”和“填充”的混合图例

来自分类Dev

如何在不使用for循环的情况下打印和保存多个ggplot图?

来自分类Dev

R Shiny:读取 CSV 并使用 dplyr 和 ggplot 保存在变量中

Related 相关文章

  1. 1

    R:gtable和ggplot对象之间的可靠转换。ggplot_build()之后如何使Lemon :: reposition_legend()工作?

  2. 2

    使用ggsave(ggplot2)将ggplot用不同的文件格式保存两次

  3. 3

    使用ggplot绘制多个图形

  4. 4

    使用ggplot2的图形

  5. 5

    使用 ggplot 和 marrangeGrob 在多个页面上绘制多个图形

  6. 6

    用grid和gtable拆除ggplot

  7. 7

    ggplot中的ggsave()用于python不保存

  8. 8

    R:是否可以从使用grid.arrange和ggplot创建的gtable对象中提取原始数据?

  9. 9

    将ggplot与图形功能配合使用

  10. 10

    如何使用ggplot删除图形中的空间

  11. 11

    将gridExtra更新为2.0.0后使用ggsave和rangingGrob

  12. 12

    使用功能保存ggplot

  13. 13

    使用gtable排列ggplot图(宽度相同的小块)以创建2x2布局

  14. 14

    替换gtable中ggplot的元素:标签和网格线

  15. 15

    C#和R.Net不使用ggplot2显示任何图形

  16. 16

    ggplot2和Shiny:如何使用图形大小缩放图例的大小?

  17. 17

    ggplot,同时使用vjust和hjust为同一图形,如何代码呢?

  18. 18

    将大括号添加到ggplot2,然后使用ggsave

  19. 19

    如何在要在 ggplot2 图形中使用的表达式()中包含带有保存文本的对象?

  20. 20

    错误没有适用于“ ggplot_build”的适用于“网格”类对象的方法

  21. 21

    在ggplot图形中使用unicode字符的舒适方法

  22. 22

    如何使用ggplot2清理数据并创建图形?

  23. 23

    在R中使用ggplot的这种图形的语法是什么?

  24. 24

    如何在R中使用ggplot绘制图形

  25. 25

    使用多个方面播放 ggplot2 的图形

  26. 26

    如何使用 geom_bar 优化图形 ggplot

  27. 27

    使用ggplot2对两个不同几何图形进行“着色”和“填充”的混合图例

  28. 28

    如何在不使用for循环的情况下打印和保存多个ggplot图?

  29. 29

    R Shiny:读取 CSV 并使用 dplyr 和 ggplot 保存在变量中

热门标签

归档