Как сохранить графики в формате PDF с меньшим размером R?

#r #pdf #ggplot2

#r #PDF #ggplot2

Вопрос:

У меня возникли проблемы с сохранением многочисленных ggplots внутри pdf, потому что я создаю ggplots (точечные диаграммы и коробочные диаграммы) с 12 миллионами строк (много наблюдений).

Проблема в том, что когда я сохраняю график в формате PDF, используя:

 ggsave("my_plots.pdf", myArrangedPlots)
  

Размер PDF очень большой = 90 МБ для всего 120 страниц PDF

Когда я сохраняю один график в формате PNG, используя:

 ggsave("plot1.png" plot1)
  

Размер намного меньше по сравнению с сохранением одного и того же графика в формате PDF (1 МБ против 0,1 МБ)

Я думаю, причина в том, что внутренний механизм ggplot пытается сохранить графики в векторном формате внутри PDF-файла, чтобы получить максимальное разрешение, но мне не нужно такое большое разрешение. Также обратите внимание, что при наличии миллиона точек, представленных в векторном формате, размер будет больше, чем тот же график в формате PNG, потому что PNG не сохраняет слои.

Я хочу сохранить графики в формате PDF, но встроить графики в формате PNG вместо векторизованного формата, чтобы уменьшить размер файла PDF.

Есть ли какой-либо параметр в ggplot2 для достижения этой цели или есть какой-либо обходной путь?

Комментарии:

1. да, только что исправил, спасибо @RichardTelford

2. Используйте rmarkdown для создания PDF-документа со встроенными изображениями.

3. Ваш инстинкт верен, но SVG не имеет к этому никакого отношения. PDF также является векторизованным форматом для изображений — когда график сохраняется в формате PDF, все точки кодируются и сохраняются.

4. @GregorThomas спасибо за ваш комментарий. Я хотел бы добиться этого с помощью файла .R, чтобы я мог запускать его каждые x дней с помощью cronjobs, использование Rmarkdwon — последний вариант

5. Как вы думаете, почему Rmarkdown будет сложнее, чем . R для запуска с cronjobs?

Ответ №1:

Судя по документации pdf(), его параметры, похоже, совместимы с ggsave().

Я нашел параметр, который использует BATS, по умолчанию для него установлено значение FALSE, но если вы установите для него значение TRUE, размер PDF-файла резко уменьшится с 94 МБ до 10 МБ в моем случае.

Поэтому я использую его так:

 ggsave("myplots.pdf", arrangedPlots, useDingbats = TRUE)
  

ПРИМЕЧАНИЕ: установка useDingbats в значение true что делает, так это использование шрифта Dinbats для маленьких кругов, что в случае точечных графиков и коробочных графиков с большим количеством точек выбросов значительно уменьшает размер конечного PDF.