2013-03-22 5 views
2

나는 pdf로 저장하고 싶은 rgl을 사용하여 3d 표면을 플로트했다. 플롯이 상당히 단순하더라도 파일 크기는 1Mb에 가깝습니다. lit=FALSE 설정rgl postscript의 파일 크기를 줄이는 방법은 무엇입니까?

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 

이미 상당히 파일 크기를 줄일 수 있습니다.

어떻게이 그림의 크기를 줄일 수 있습니까?

감사합니다.

(I 플롯에 더 많은 요소를 추가 할 수 있기 때문에, lattice::wireframe이 옵션을 선택하지 않습니다.) 일반적으로

+0

''rgl' 장치 창을 확대하고 테두리를 제거하고 PNG로 저장 한 후 완성을 위해 printscreen (예, 키 입력)을 시도했습니다. 이미지 파일은 약 45kb 였고 훨씬 더 멋지게 보였습니다 ... –

+0

맞았지 만, 인물을 벡터 그래픽으로 저장하는 편이 더 좋습니다. – sieste

+0

@ Ferdinand.kraft, printscreen은'rgl.snapshot()'...보다 나은 출력을 제공합니까? –

답변

1

는 또한 벡터 그래픽을 선호하지만, 여기 상황은 RGL 장면을 렌더링하는 것입니다. 이것은 pdf가 많은 작은 조각으로 구성된다는 것을 의미합니다. 따라서 파일 크기가 빠르게 커집니다. 실제로, 당신의 pdf는 많은 작은 직선으로 이루어져있다. lit = FALSE은이 줄이 다른 색으로 더 얇은 줄로 나뉘어지지 않는다는 것을 의미합니다.

이 조각들은 pdfs에서도 높은 배율로 볼 수 있습니다. 따라서이 경우 비트 맵 그래픽을 자주 사용합니다 (특히 표면이 렌더링되는 경우). 괜찮은 해상도를 얻으려면 I rgl.snapshot 큰 창이 있습니다. tperfect는 아니지만 저에게있어서 절충안입니다 (저는 eye-catchers가 아닌 "3d"그래프의 스냅 샷을 사용하거나 정량적 시각화가 아닌 개요 정보 용).


는 PDF를 검사, I는 각 라인의 2 장, 아마도 하나 전면 및 후면에 대해 하나 또는 각 인접 다각형 하나가 있다는 것을 발견했다. frontback 매개 변수가 약 surface3d 인 비트를 사용하여 "인접한 다각형"방향으로 재생합니다.

+0

설명해 주셔서 감사합니다. OpenGL에 이미 렌더링 된 장면의 벡터 그래픽 출력을 요청하는 것은별로 의미가 없다는 것을 이해했습니다. pdf는 큰 배율의 벡터 그래픽과 매우 흡사합니다. 그러나, 나는 "neihbour 폴리곤"에 대한 마지막 발언을 이해하지 못합니다. – sieste

+1

@sieste :'back = "cull"'으로 렌더링했는데 (배경 폴리곤을 생성하지 말아야한다고 생각합니다.), 여전히 서로 위에 선을 발견했습니다. – cbeleites

관련 문제