fli*_*ech 5 r ggplot2 magrittr
我可以在存储后使用 ggsave 保存绘图,但是在管道中使用它时出现以下错误。我希望在相同的(管道)命令中绘制和保存。
no applicable method for 'grid.draw' applied to an object of class "c('LayerInstance', 'Layer', 'ggproto', 'gg')"
Run Code Online (Sandbox Code Playgroud)
我知道 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')
Run Code Online (Sandbox Code Playgroud)
正如 akrun 指出的,您需要将所有 ggplot 括在括号中。您还可以使用点符号将对象传递给函数参数,而不是 magrittr 管道流中的第一个参数:
library(magrittr)
library(ggplot2)
data("diamonds")
(
ggplot(diamonds, aes(x=cut)) +
geom_bar()
) %>%
ggsave("plot.png", . , dpi = 100, width = 4, height = 4)
Run Code Online (Sandbox Code Playgroud)
如果你想在一行中绘制和保存,试试这个
ggplot(diamonds, aes(x=cut)) +
geom_bar() +
ggsave('plot.bmp')
Run Code Online (Sandbox Code Playgroud)
如果您不想显示情节,只需放在p <-开头即可。
如果你有自定义保存功能,你也可以这样做
mysave <- function(filename) {
ggsave(file.path("plots", paste0(filename, ".png")),
width = 8, height = 6, dpi = 300)
}
Run Code Online (Sandbox Code Playgroud)
和简单地更换ggsave('plot.bmp')与mysave('plot')在上面的代码段。
我偶然发现了这种用法,但没有找到任何文档。
| 归档时间: |
|
| 查看次数: |
1669 次 |
| 最近记录: |