2

我绘制了一个 3d 曲面rgl,我想使用它保存为 pdf。尽管情节相当简单,但文件大小接近 1Mb。

require(rgl)

f <- function(x,y) {
    d <- 3 * sqrt(x*x + y*y)
    exp(-0.02 * d^2) * sin(d)
}

x <- y <- seq(-pi, pi, length=50)
Grid <- expand.grid(x=x, y=y)
z <- matrix(f(Grid$x, Grid$y), length(x), length(y))

rgl.open()
rgl.viewpoint(phi=-60, theta=0, fov=30, zoom=.8)
surface3d(x, y, z, color="black", front="lines", lit=FALSE)
rgl.bg(color="white")

Sys.sleep(1) #to give rgl some time to render
rgl.postscript("surface.pdf", fmt="pdf") 
Sys.sleep(1)
print(file.info("surface.pdf")$size)
# 880K

设置lit=FALSE已经大大减少了文件大小。

我还能如何减小这个数字的大小?

谢谢!

(因为我想在情节中添加更多元素,lattice::wireframe所以不是一个选项。)

4

1 回答 1

1

一般来说,我也更喜欢矢量图形,但这里的情况是 rgl 渲染场景。这意味着 pdf 由许多小块组成 - 这就是文件大小快速增长的原因。事实上,您的 pdf 由许多细小的直线组成。lit = FALSE意味着这些线条不会被分割成更细的不同颜色的线条。

这些片段在更高放大倍率的 pdf 中也可见,因此我经常在这种情况下使用位图图形(特别是在渲染表面的情况下)。为了获得体面的分辨率,我rgl.snapshot打开了一个大窗口。不完美,但对我来说是一个可行的折衷方案(我使用“3d”图形的快照而不是作为引人注目的或概述信息,而不是作为定量可视化)。


检查 pdf,我发现每行有 2 个副本,可能一个用于正面,一个用于背面,或者来自每个相邻的多边形。使用“相邻多边形”方向上的点frontback参数进行一些操作。surface3d

于 2013-03-23T13:29:02.457 回答