Использование ggsave с трубкой - PullRequest
0 голосов
/ 12 февраля 2019

После сохранения я могу сохранить график с помощью ggsave, но, используя его в конвейере, получаю следующую ошибку.Я хочу построить и сохранить в той же (пайп) команды

  no applicable method for 'grid.draw' applied to an object of class "c('LayerInstance', 'Layer', 'ggproto', 'gg')" 

Я знаю, что аргументы ggsave - это сначала имя файла, а затем график, но переключение этого в оболочку не работает.Кроме того, использование 'filename =' и 'plot =' в команде ggsave не работает.

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')

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Как указал Акрун, вам нужно заключить весь ваш ggplot в скобки.Вы также можете использовать точечную нотацию для передачи объекта параметру функции, отличному от первого в потоке трубы magrittr:

library(magrittr)
library(ggplot2)
data("diamonds")

(
  ggplot(diamonds, aes(x=cut)) +
    geom_bar()
) %>% 
  ggsave("plot.png", . , dpi = 100, width = 4, height = 4)
0 голосов
/ 12 февраля 2019

Попробуйте:

p<-iris %>% 
  ggplot(aes(Sepal.Length,fill=Species))+geom_bar() 
  p %>% 
  ggsave("sample.png",plot=.)

РЕДАКТИРОВАТЬ :: Может быть, кто-то знает одношаговый ответ, я оставлю это здесь, если кто-то:

p1<-iris %>% 
  ggplot(aes(Sepal.Length,fill=Species))+geom_bar() 
 ggplot_gtable(ggplot_build(p1)) %>% 
    ggsave("sample_1.png",device="png",plot=.)
...