Подтвердить что ты не робот

Сохранить ggplot в функции

Я пытаюсь сохранить ggplot внутри функции с помощью графических устройств. Но я обнаружил, что код создает пустые графы. Ниже приведен очень простой пример.

library(ggplot2)
ff <- function(){
  jpeg("a.jpg")
  qplot(1:20, 1:20)
  dev.off()
}
ff()

Если я только запускаю содержимое функции, все в порядке. Я знаю, что использование ggsave() будет делать то, что я хочу, но мне просто интересно, почему jpeg() и dev.off() не работают. Я пробовал это с разными версиями R, и проблема сохраняется.

4b9b3361

Ответ 1

Вы должны использовать ggsave вместо последовательности jpeg(); print(p); dev.off(). ggsave - это оболочка, которая делает именно то, что вы намереваетесь делать с вашей функцией, за исключением того, что она предлагает больше возможностей и универсальности. Вы можете явно указать тип вывода, например. jpg или pdf, или он будет угадывать из вашего расширения имени файла.

Таким образом, ваш код может выглядеть примерно так:

p <- qplot(1:20, 1:20)
ggsave(filename="a.jpg", plot=p)

Подробнее см. ?ggsave


Причина, по которой исходное поведение в вашем коде не срабатывает, действительно часто задается вопросом (на stackoverlflow, а также R Часто задаваемые вопросы по CRAN). Вам нужно вставить оператор print для печати графика. В интерактивной консоли печать выполняется в фоновом режиме.

Ответ 2

Эти графики должны быть напечатаны:

ff <- function(){
  jpeg("a.jpg")
  p <- qplot(1:20, 1:20)
  print(p)
  dev.off()
}
ff()

Это очень важная ошибка .