首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ggsave与管道一起使用

将ggsave与管道一起使用
EN

Stack Overflow用户
提问于 2019-02-12 18:40:03
回答 2查看 1.9K关注 0票数 6

我可以在存储绘图后使用ggsave保存它,但在管道中使用它时,我会得到以下错误。我希望在同一(管道)命令中绘制和保存。

代码语言:javascript
复制
  no applicable method for 'grid.draw' applied to an object of class "c('LayerInstance', 'Layer', 'ggproto', 'gg')" 

我知道ggsave的参数首先是文件名,然后是图,但是在包装器中切换它是不起作用的。此外,在ggsave命令中使用'filename=‘和'plot=’也不起作用。

代码语言:javascript
复制
library(magrittr)
library(ggplot2)
data("diamonds")

# my custom save function
customSave <- function(plot){
    ggsave('blaa.bmp', plot)
}

#This works:
p2 <- ggplot(diamonds, aes(x=cut)) + geom_bar()
p2 %>% customSave()

# This doesn't work:
ggplot(diamonds, aes(x=cut)) + geom_bar() %>% customSave()

# and obviously this doesn't work either
ggplot(diamonds, aes(x=cut)) + geom_bar() %>% ggsave('plot.bmp')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 06:51:27

如果您想要在一行中打印和保存,请尝试执行以下操作

代码语言:javascript
复制
ggplot(diamonds, aes(x=cut)) + 
  geom_bar() +
  ggsave('plot.bmp')

如果您不想显示绘图,只需将p <-放在开头即可。

如果你有一个自定义的保存功能,你也可以这样做

代码语言:javascript
复制
mysave <- function(filename) {
  ggsave(file.path("plots", paste0(filename, ".png")), 
         width = 8, height = 6, dpi = 300)
}

只需在上面的代码片段中用mysave('plot')替换ggsave('plot.bmp')即可。

我偶然发现了这种用法,但没有找到任何文档。

票数 6
EN

Stack Overflow用户

发布于 2019-02-12 22:00:48

正如akrun所指出的,你需要把你所有的ggplot都放在括号里。您还可以使用dot notation将对象传递给函数参数,而不是magrittr管道流中的第一个参数:

代码语言:javascript
复制
library(magrittr)
library(ggplot2)
data("diamonds")

(
  ggplot(diamonds, aes(x=cut)) +
    geom_bar()
) %>% 
  ggsave("plot.png", . , dpi = 100, width = 4, height = 4)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54648159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档