2

Я использую R для создания графики со многими прозрачными слоями. Я хочу, чтобы вывод был в формате PDF, но размеры файлов взрываются, когда есть так много прозрачных слоев. Я могу вручную открыть каждый из них в GIMP и сгладить его там, но я бы хотел сделать это с помощью вызова system() в R, чтобы этот процесс можно было автоматизировать. Кто-нибудь знает способ сделать это?

Вот глупый воспроизводимый пример:

set.seed(2)
x = sort(runif(100))*10
y = rgamma(100,shape = x*rexp(100),scale=1/exp(rnorm(100)))
plot(x,y)
for (i in 1:200){
y = rgamma(100,shape = x*rexp(100),scale=1/exp(rnorm(100)))
fit = loess(y~x)
points(x,y,col=rgb(0,1,0,.3))
lines(x,predict(fit),col=rgb(1,0,0,.3))
}

Теперь я хочу иметь возможность сделать dev.copy2pdf(file="dumb_graph.pdf") , а затем сделать system(something) чтобы сгладить изображение. Или, скорее всего, ряд различных системных вызовов. Кто-нибудь знает какие-либо утилиты, которые будут делать это?

Изменить: Я ищу решения для Linux, но я думаю, что решения на других платформах были бы полезными сообщения для тех, кто может искать этот один день.

Edit2: вывод должен быть векторным.

Edit3: это перенесено из SO

1 ответ1

0

Вы уверены в своем диагнозе, что файл PDF имеет большой размер из-за наличия "множества прозрачных слоев"?

Мне кажется, это может быть просто количество объектов, в вашем примере у вас есть пары координат 200x100, PDF - 1,2 МБ, поэтому вы жалуетесь, что каждая пара координат использует до 60 B.

На некотором этапе и для некоторого целевого разрешения (например, различного для экрана или печати) существует перекрестный переход между эффективностью хранения векторной графики и растровой графики. Таким образом, вы можете экспортировать PNG, а не PDF в данном случае.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .