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

Как сохранить прозрачность в ggplot2?

Мне нравятся сюжеты, которые генерирует ggplot. Тем не менее, по-прежнему довольно сложно получить графики качества публикации напрямую. Обычно мне приходится делать некоторую пост-обработку в Illustrator (т.е. Изменять шрифты, цифры и т.д.). Хотя я мог бы сэкономить как tiff или png, eps лучше всего подходит для манипуляции фигурами в Illustrator (я могу разгруппировать объекты, переместить легенду/текст и т.д.).

Когда я сохраняю объект ggplot с некоторой прозрачностью (либо в точках, либо более гладкой), я получаю эту ошибку:

Warning message:
In grid.Call.graphics("L_points", x$x, x$y, x$pch, x$size) :
  semi-transparency is not supported on this device: reported only once per page

Есть ли обходной путь?

4b9b3361

Ответ 1

R eps "device" не поддерживает частичную прозрачность, но, если я правильно помню, его устройство PDF делает. Иллюстратор должен иметь возможность читать PDF файлы с равным доступом к EPSes, или если нет, попробуйте преобразовать их после поколения с помощью pdftops (не pdf2ps, это совершенно разные программы, а выход pdf2ps - ниже).

Обратите внимание, что R не пытается полностью оптимизировать свой вывод PDF, поэтому даже если у вас есть сюжет, который не требует постпродакшн, вы захотите запустить его с помощью утилиты сжатия, например qpdf.

Ответ 2

Это работает:

ggsave("filename.eps", device=cairo_ps)

Ответ 3

У меня были те же проблемы с использованием функции postscript. Я обнаружил, что cairo_ps из пакета grDevices поддерживает прозрачность (по крайней мере, в Ubuntu 10.04 с R версии 2.10.1). Использование:

cairo_ps(filename='filename.eps', width=7, height=7)
plot(x,y)
dev.off()

Ответ 4

Вы также можете попробовать экспортировать SVG через svg-устройство. Не уверен, что Illustrator может читать SVG, но Inkscape может, и он открывает исходный код:) Я сделал несколько хороших вещей с выходом R для SVG в Inkscape, и группировки сохраняются как с EPS. Не может быть на 100% уверен, что он обрабатывает непрозрачность, но я уверен, что это в стандарте SVG.

Ответ 5

Формат EPS в принципе не поддерживает полупрозрачность - если вы хотите полупрозрачность и сможете редактировать в Illustrator или Inkscape, вам лучше экспортировать в SVG или PDF. Если вы действительно привязаны к EPS-формату, вы можете использовать устройство cairo, хотя и указать, при каком разрешении нужно полупрозрачные объекты растеризовать (только не-полупрозрачные элементы остаются в качестве векторного формата, хотя, хотя и полупрозрачные области растрируются в растровое изображение). Синтаксис для этого:

cairo_ps(file = "test.eps", onefile = FALSE, fallback_resolution = 600)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
dev.off()

или

ggsave("filename.eps", device=cairo_ps, fallback_resolution = 600)

Альтернативный вариант - экспортировать в MS Office Powerpoint в векторном формате и выполнять любое редактирование макета. Это можно сделать с помощью ReporteRs или моего собственного пакета export, который был построен на нем:

library( ReporteRs )
require( ggplot2 )
mydoc = pptx(  )
mydoc = addSlide( mydoc, slide.layout = "Title and Content" )
mydoc = addTitle( mydoc, "Plot examples" )
myplot = qplot(Sepal.Length, Petal.Length
               , data = iris, color = Species
               , size = Petal.Width, alpha = I(0.7)
)
# Add titles and then 'myplot'
mydoc = addPlot( mydoc, function( ) print( myplot ), vector.graphic=TRUE) 
writeDoc( mydoc, file = "test plot.pptx" )

enter image description here

или используя мой пакет export (https://github.com/tomwenseleers/export):

library(export)
qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
graph2ppt(file="plot.pptx", width=8, aspectr=sqrt(2))

Это приводит к полностью редактируемому высокому графику Powerpoint в собственном формате DrawingML на основе Office с полной поддержкой прозрачности. Там вы можете легко исправить незначительные проблемы с форматированием и экспортировать в PDF файл высокого качества, выполнив печать в формате PDF.