2

rglPDFとして保存したい3Dサーフェスをプロットしました。プロットはかなり単純ですが、ファイルサイズは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つあることがわかりました.1つは前面用、もう1つは背面用、または隣接する各ポリゴンから1つです。「隣接ポリゴン」の方向にあるポイントのfrontおよびbackパラメータを少しいじってみます。surface3d

于 2013-03-23T13:29:02.457 に答える