在R中创建3D绘图会打开一个交互式窗口,用户可以在其中旋转视图。例如下面使用包rgl
:
library(rgl)
plot3d(iris[,1:3],col=c("red","green","blue")[iris$Species],size=5)
是否有某种方法可以设置预定义视图并将绘图导出为常规图像。我希望以自动化的非交互方式为许多数据集执行此操作。
答案 0 :(得分:1)
使用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()
答案 1 :(得分:1)
除了@ d.b使用scatterplot3d
代替rgl
的回答,您可以使用R Markdown保存结果。这样做的好处是可以获得交互式显示而不是静态显示;缺点是格式是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)
你会得到像
这样的东西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))
作为输出。然后用
之类的东西开始你的R Markdown文档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()
(如果由于其他原因,这是在循环中或不在顶层,则您需要print(rglwidget())
代替。)
然后你的所有情节都会有相同的方向,但所有这些都是用户可以旋转的。