旋转persp3d绘图并将图像保存为png

时间:2013-08-05 16:43:32

标签: r data-visualization

使用R,我使用persp3d包的rgl函数来获得漂亮的3d图。

现在我要旋转persp3d功能并将每个小的旋转图像保存为png文件。然后我希望使用命令animategraphic在我的乳胶演示文稿中包含png。

我想问一下,我怎么能这样做?

我需要它们以一种我可以在乳胶中实现它们的方式,因此png文件的名称应该像a1,a2等等......

我创建persp3d图的代码是:

persp3d(x, y, z, theta=50, phi=25, expand=0.75, col=color[zcol2],
        ticktype="detailed", xlab="", ylab="", zlab="",axes=FALSE)

然后我尝试使用spin3d命令旋转它:

spind3d(rpm=3)

哪个不起作用。这也不会将png保存到我的驱动器中吗?

3 个答案:

答案 0 :(得分:5)

以下是使用spin3d功能更改视图的替代方法,以及movie3d以保存图像。

library(rgl)
x <- seq(-10, 10, length= 30)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
persp3d(x,y,z,theta=0,phi=25, col = "lightblue",
        ticktype="detailed", xlab="", ylab="", zlab="",axes=FALSE)
movie3d(spin3d(axis = c(0,0,1), rpm = 10), duration=6,  type = "png")

请注意,默认情况下movie3d会将文件保存在tempdir()设置的文件夹中。

答案 1 :(得分:4)

x=1:10
y=1:10
z=matrix(runif(100),10,10)
persp3d(x,y,z,theta=50,phi=25)

然后循环theta或phi,使用view3d设置角度,snapshot3d使PNG

theta = seq(0,360,len=10)
for(i in 1:10){
 snapshot3d(file=paste0("spin-",i,".png"))
 view3d(theta=theta[i])
}

您可能希望循环覆盖phi而不是theta。无论如何,这会让你得到你想要的PNG,不是吗?

答案 2 :(得分:2)

可能是有需要的人。我对persp3Drgl使用了以下组合:

userMat = matrix(data = c( 0.4892255, 0.8709987, 0.04464279, 0,
                       -0.5228708, 0.2519508, 0.81430787, 0,
                       0.6980215, -0.4217298, 0.57868713, 0,
                       0.0000000, 0.0000000, 0.0000000, 1
                       ), nrow = 4, ncol = 4)

persp3Drgl(..., userMatrix = userMat )
par3d( windowRect=c( 0,0,100,100 ) )
snapshot3d( file.path(plotDir, "3D.png"), top = TRUE )

此外,我曾经跟踪userMatrix值(在用鼠标旋转绘图后)以下命令

userMat = par3d(no.readonly=TRUE)$userMatrix