Matplotlib 允许对绘图的各个元素进行光栅化并将其保存为混合像素/矢量图形 ( .pdf)(参见例如此答案)。如何在Rwith 中实现相同的效果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)
Run Code Online (Sandbox Code Playgroud)
按.pdf原样保存时,Adobe reader DC 需要大约 1 秒来渲染图形。您可以在下面看到一个.png版本:

当然,通常可以通过不绘制原始数据来避免该问题
多亏了ggrastr包通过尤佩图霍夫&埃文Biederstedt,现在有可能光栅化各个层。但是,目前(2018-08-13)仅支持 geom_point 和 geom_tile。并通过师德面包车工作巢穴品牌,现在可以通过它环绕光栅化任何个人ggplot层ggrastr::rasterise():
# install.packages('devtools')
# remotes::install_github('VPetukhov/ggrastr')
df %>% ggplot(aes(x=x, y=y)) +
# this layer will be rasterized:
ggrastr::rasterise(geom_point(size=0.1, alpha=0.1)) +
# this one will still be "vector":
geom_smooth()
Run Code Online (Sandbox Code Playgroud)
以前,仅支持少数几何体:要使用它,您必须将其替换geom_point为ggrastr::geom_point_rast.
例如:
# install.packages('devtools')
# devtools::install_github('VPetukhov/ggrastr')
library(ggplot2)
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)
ggplot(data.frame(x, y, z), aes(x=x, y=y)) +
facet_wrap("z") +
ggrastr::geom_point_rast(size=0.1, alpha=0.1) +
scale_x_log10() + scale_y_log10() +
geom_smooth(method="gam", formula = y ~ s(x, bs = "cs"))
ggsave("out.pdf")
Run Code Online (Sandbox Code Playgroud)
这会产生一个pdf只包含geom_point图层作为光栅而其他所有内容作为矢量图形的。总体而言,该图看起来与问题中的图相同,但放大显示差异:
将此与全光栅图形进行比较:

| 归档时间: |
|
| 查看次数: |
1698 次 |
| 最近记录: |