【发布时间】:2017-11-10 12:25:43
【问题描述】:
Matplotlib 允许栅格化绘图的各个元素并将其保存为混合像素/矢量图形 (.pdf)(参见例如 this answer)。在R 和ggplot2 中如何实现相同的效果?
以下是一个玩具问题,我想只栅格化geom_point 层。
set.seed(1)
x <- rlnorm(10000,4)
y <- 1+rpois(length(x),lambda=x/10+1/x)
z <- sample(letters[1:2],length(x), replace=TRUE)
p <- ggplot(data.frame(x,y,z),aes(x=x,y=y)) +
facet_wrap("z") +
geom_point(size=0.1,alpha=0.1) +
scale_x_log10()+scale_y_log10() +
geom_smooth(method="gam",formula = y ~ s(x, bs = "cs"))
print(p)
ggsave("out.pdf", p)
按原样保存为.pdf 时,Adobe Reader DC 需要约 1 秒来渲染图形。下面你可以看到一个.png 版本:
当然,通常可以通过不绘制原始数据来避免该问题
【问题讨论】:
-
这可能是一个真正的问题:考虑一篇科学文章的两个版本:arxiv.org/abs/1501.01332v2(所有数字矢量)vs arxiv.org/abs/1501.01332v3(所有数字光栅化)。第一个可能会卡住您的打印机或 pdf 查看器,而第二个则不那么清晰,但文件大小要大得多。
-
作为一种解决方法,使用
dpi=600甚至dpi=1200将整个绘图保存为png 应该可以提供相当清晰的光栅图像,而不会生成巨大的文件。 png 是专为线条图形设计的。 -
@YAK 您有想要保存的示例图吗?我的直接想法是建议您看看 grConvert 和 grImport2。 stat.auckland.ac.nz/~paul/R/grImport2/grImport2.pdf。一个示例图会有所帮助,因为我们可以映射到您的示例。
-
@Technophobe01 现在添加了一个。修改生成的矢量图形的有趣建议(如果这是您的意思)。您将如何保留图层从属关系?