R:以非交互方式导出 3D 散点图
R: Export 3D scatterplots non-interactively
在 R 中创建 3D 绘图会打开一个交互式 window,用户可以在其中旋转视图。例如下面使用包 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 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())
。)
那么你所有的地块最初都会有相同的方向,但它们都是用户可旋转的。
在 R 中创建 3D 绘图会打开一个交互式 window,用户可以在其中旋转视图。例如下面使用包 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 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())
。)
那么你所有的地块最初都会有相同的方向,但它们都是用户可旋转的。