我可以在存储绘图后使用ggsave保存它,但在管道中使用它时,我会得到以下错误。我希望在同一(管道)命令中绘制和保存。
no applicable method for 'grid.draw' applied to an object of class "c('LayerInstance', 'Layer', 'ggproto', 'gg')" 我知道ggsave的参数首先是文件名,然后是图,但是在包装器中切换它是不起作用的。此外,在ggsave命令中使用'filename=‘和'plot=’也不起作用。
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')发布于 2019-12-06 06:51:27
如果您想要在一行中打印和保存,请尝试执行以下操作
ggplot(diamonds, aes(x=cut)) +
geom_bar() +
ggsave('plot.bmp')如果您不想显示绘图,只需将p <-放在开头即可。
如果你有一个自定义的保存功能,你也可以这样做
mysave <- function(filename) {
ggsave(file.path("plots", paste0(filename, ".png")),
width = 8, height = 6, dpi = 300)
}只需在上面的代码片段中用mysave('plot')替换ggsave('plot.bmp')即可。
我偶然发现了这种用法,但没有找到任何文档。
发布于 2019-02-12 22:00:48
正如akrun所指出的,你需要把你所有的ggplot都放在括号里。您还可以使用dot notation将对象传递给函数参数,而不是magrittr管道流中的第一个参数:
library(magrittr)
library(ggplot2)
data("diamonds")
(
ggplot(diamonds, aes(x=cut)) +
geom_bar()
) %>%
ggsave("plot.png", . , dpi = 100, width = 4, height = 4)https://stackoverflow.com/questions/54648159
复制相似问题