R:以非交互方式导出三维散点图

R:以非交互方式导出三维散点图,r,plot,rgl,R,Plot,Rgl,在R中创建3D绘图将打开一个交互式窗口,用户可以在其中旋转视图。例如,下面使用包rgl: library(rgl) plot3d(iris[,1:3],col=c("red","green","blue")[iris$Species],size=5) 是否有一些方法可以设置预定义视图并将绘图导出为常规图像。对于许多数据集,我希望以自动的非交互式方式执行此操作。使用scatterplot3d软件包 library(scatterplot3d) graphics.off() png(filena

在R中创建3D绘图将打开一个交互式窗口,用户可以在其中旋转视图。例如,下面使用包
rgl

library(rgl)
plot3d(iris[,1:3],col=c("red","green","blue")[iris$Species],size=5)


是否有一些方法可以设置预定义视图并将绘图导出为常规图像。对于许多数据集,我希望以自动的非交互式方式执行此操作。

使用
scatterplot3d
软件包

library(scatterplot3d)
graphics.off()
png(filename = "test.png", width = 8, height = 6, units = "in", res = 300)
par(mai = c(0.5, 0.5, 0.5, 0.5))
scatterplot3d(x = iris$Sepal.Length, y = iris$Sepal.Width, z = iris$Petal.Length,
              color = c("red","green","blue")[iris$Species],
              cex.symbols = 1, pch = 19, angle = -30)
dev.off()

除了使用
scatterplot3d
而不是
rgl
保存@d.b的答案外,还可以使用R标记保存结果。这样做的好处是,你可以得到一个交互式的显示,而不是静态的;缺点是格式是HTML,而不是PNG或其他位图格式

在编写文档之前,像这样运行代码并以交互方式选择 所需的初始显示:

library(rgl)
options(rgl.useNULL = FALSE)
plot3d(iris[,1:3],col=c("red","green","blue")[iris$Species],size=5)
正确定向后,运行以下代码:

M <- par3d("userMatrix")
dput(M)
作为输出。然后用以下内容开始R降价文档

library(rgl)
options(rgl.useNULL = TRUE)
M <- structure(c(0.776694416999817, 0.198224693536758, -0.597873568534851, 
0, -0.629868388175964, 0.249577552080154, -0.735511302947998, 
0, 0.00341932475566864, 0.947849154472351, 0.318700969219208, 
0, 0, 0, 0, 1), .Dim = c(4L, 4L))
(如果这是一个循环或由于其他原因不在顶层,则需要
打印(rglwidget())
。)


然后,所有绘图最初都具有相同的方向,但所有绘图都可以由用户旋转。

这很好。是否可以添加图例?与ggplot()中的图例不同,但可以添加一个作为背景图像。小心:展示一些可能出错的东西。
library(rgl)
options(rgl.useNULL = TRUE)
M <- structure(c(0.776694416999817, 0.198224693536758, -0.597873568534851, 
0, -0.629868388175964, 0.249577552080154, -0.735511302947998, 
0, 0.00341932475566864, 0.947849154472351, 0.318700969219208, 
0, 0, 0, 0, 1), .Dim = c(4L, 4L))
plot3d(iris[,1:3],col=c("red","green","blue")[iris$Species],size=5)
par3d(userMatrix = M)
rglwidget()