3

draw_image()使用cowplot中的函数读取矢量化pdf 有时会导致图像严重模糊:

library(ggplot2)
library(cowplot)
library(magick)

# make pdf input as example
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, shape = Species)) + 
  geom_point() + scale_shape_manual(values = 21:23) + theme_classic()
ggsave("input.pdf", p, width = 6, height = 4.2)

# now draw with draw_image() and then write as png
fig <- ggdraw() + draw_image("input.pdf")
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200) # blurred image

在此处输入图像描述

但是,阅读 SVG 可以正常工作:

fig <- ggdraw() +
  draw_image("http://jeroen.github.io/images/tiger.svg")
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200)

在此处输入图像描述

此外,使用:

magick::image_read_pdf("input.pdf")

导致输出不模糊。

4

1 回答 1

3

我不完全确定为什么 SVG 和 pdf 的处理方式不同,或者当您阅读 pdf 时会发生什么magick::image_read()(这是draw_image()内部使用的),但一种解决方案是magick::image_read_pdf()draw_image(). 该函数magick::image_read_pdf()将pdf转换为光栅图像,我们可以使用density参数指定我们想要的分辨率:

fig <- ggdraw() + draw_image(magick::image_read_pdf("input.pdf", density = 600))
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200)

在此处输入图像描述

于 2018-04-25T16:37:40.690 回答