每当我在RGL plot3D上进行重新绘图时,都会导致绘图的视图方向重置为默认值。
有没有人知道如何保存这些设置,以便在重绘图表后重新应用它们。我试过this:
# save settings
pp <- par3d(no.readonly=TRUE)
# initialize plot
plot3d(c(), c(), c(), "", "", "")
# Replot data here
# ...
# restore settings
par3d(pp)
但是,这并没有恢复情节方向。
编辑:打印出par3d()的结果显示,当绘图旋转和缩放时,值没有得到更新,所以我猜这是问题所在。如果人们已经将它与rgl一起使用,那么它可能仅适用于ShinyRGL。
答案 0 :(得分:2)
rgl图的问题在于,在旋转绘图时它不会更改par3d
旋转矩阵(对于缩放也是如此)。此外,我找不到任何提示存储旋转/缩放状态的文档。因此,我们没有关于绘图当前状态的信息,并且保存/加载该状态是不可能的。
我的解决方案是使用滑块手动控制绘图的旋转/缩放;当这些滑块发生变化时,我们手动更新par3d
旋转矩阵。
虽然我真的不喜欢这个解决方案,因为它消除了绘图旋转/缩放的许多便利,但这是我在更新后能够保持旋转/缩放状态的唯一方法。
par3d
par3d
包含旋转/缩放状态。答案 1 :(得分:1)
我不知道这是否在最近的rgl版本中发生了变化,但对我来说它是有效的。我使用的是rgl版本0.95.1441。
定义一个加载数据和调用plot3d()
的函数(这里使用随机数据):
library(rgl)
newRGLrandom <- function(){
n <- 10
x <- sort(rnorm(n))
y <- rnorm(n)
z <- rnorm(n) + atan2(x, y)
plot3d(x, y, z, col = rainbow(n), size=10)
}
图表以标准方向开始:
newRGLrandom()
然后我在rgl窗口中手动旋转:
当我再次调用newRGLrandom()
函数时,它会以相同的旋转显示新图:
newRGLrandom()
我也可以保存用户轮换:
uM <- par3d()$userMatrix
并稍后将绘图移动到存储的旋转:
par3d(userMatrix = uM)
保存整个par3d
对我也有用:
pp <- par3d(no.readonly=TRUE)
par3d(pp)
我不知道为什么当你尝试它时它不起作用。也许是特定于操作系统?
我的sessionInfo()
如下:
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)
locale:
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgl_0.95.1441
loaded via a namespace (and not attached):
[1] tools_3.2.2