闪亮的RGL Plot3D:在重绘图上保持绘图视图方向

bco*_*rso 6 plot r rgl shiny

每当我在RGL plot3D上进行重新绘图时,都会导致绘图的视图方向重置为默认值.

有谁知道如何保存这些设置,以便我可以在重绘图后重新应用它们.我试过这个:

# save settings
pp <- par3d(no.readonly=TRUE)

# initialize plot
plot3d(c(), c(), c(), "", "", "")

# Replot data here
# ...

# restore settings
par3d(pp)
Run Code Online (Sandbox Code Playgroud)

但是,这并没有恢复情节方向.

编辑:打印出par3d()的结果显示,当绘图旋转和缩放时,值没有得到更新,所以我猜这是问题所在.如果人们已经将它与rgl一起使用,那么它可能仅适用于ShinyRGL.

bco*_*rso 2

问题

rgl 图的问题在于,当您旋转图时,它不会更改par3d旋转矩阵(缩放相同)。此外,我找不到任何暗示旋转/缩放状态存储位置的文档。因此,我们没有关于绘图当前状态的信息,并且不可能保存/加载该状态。

解决方案

我的解决方案是使用滑块手动控制绘图的旋转/缩放;当这些滑块发生变化时,我们手动更新par3d旋转矩阵。

虽然我真的不喜欢这个解决方案,因为它剥夺了绘图旋转/缩放的很多便利,但这是我能够在更新后保持旋转/缩放状态的唯一方法。

  1. 我定义了 3 个代表绕 X、Y、Z 轴旋转的滑块,以及一个代表缩放 ZOOM 的附加滑块。
  2. 不要在绘图上旋转/缩放,而是使用滑块。
  3. 关于滑块更改:直接更新旋转par3d
  4. 更新绘图(例如新数据)时,我在原始问题中描述的保存/加载状态的方法现在可以工作,因为par3d包含旋转/缩放状态。