Не удается создать PDF с помощью ggplot2 в операторах if - PullRequest
1 голос
/ 04 июля 2019

Рассмотрим минимальный пример: создать пустой график с помощью ggplot2 и поместить его в файл PDF. Обычно люди будут делать

pdf()
ggplot()
dev.off()

и работает как положено. Однако при переносе этих операторов в оператор if результирующий файл PDF становится поврежденным.

if (TRUE) {
    pdf()
    ggplot()
    dev.off()
}

enter image description here

Эта проблема была воспроизведена как в Windows 10, так и в MacOS Mojave. Я использую последнюю версию R

$ R --version
R version 3.6.0 (2019-04-26) -- "Planting of a Tree"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin18.6.0 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
https://www.gnu.org/licenses/.

1 Ответ

0 голосов
/ 05 июля 2019

Чтобы сохранить объект ggplot с использованием функций pdf или jpg, необходимо явно распечатать ggplot.

if (TRUE) { 
  pdf() 
  print(ggplot()) 
  dev.off()
}

Это указано в R-FAQ 7.22 Почему графика решетки / решетки не работает?

Скорее всего, вы забыли сказать R для отображения графика.Функции решетки, такие как xyplot (), создают объект графа, но не отображают его (то же самое верно для графики ggplot2 и графики Trellis в S-PLUS).Метод print () для графического объекта производит фактическое отображение.Когда вы используете эти функции в интерактивном режиме в командной строке, результат автоматически печатается, но в source () или внутри ваших собственных функций вам понадобится явный оператор print ().

Итак, это не сохранять , если один просто source скрипт, даже при отсутствии условного оператора или цикла (source с echo = TRUE спасет график).


Лично я предпочитаю использовать функцию ggsave, так как она кажется более гибкой.

if (TRUE) { 
  ggplot() 
  ggave(filename = "plot.pdf")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...