切换按钮来控制rgl 3d散点图不起作用

时间:2017-02-13 18:32:16

标签: html r plot togglebutton rgl

我们正在进行关于蜥蜴壁龛和收敛进化的元分析,并创建了一个带有PCA分数的3d图,点是来自24个不同家庭的蜥蜴物种。 我们决定使用我们的三维图作为我们手稿的补充材料,因为在二维绘制时有非常有趣的模式被遮挡。例如,所有夜行物种都粘在一起,并在第三层中与其余物种分开。

因此,为了使这些数字真正有用,我想要包含一些控件来打开/关闭一些对象(如蜥蜴家族,椭圆体或功能组)。我尝试使用Plotly,它为您提供了非常好的交互式绘图,但Plotly中的符号仅限于五个用于3D绘图。

我终于使用rgl包用R做了。我必须通过重叠先前存在的符号来创建新符号,但最后我得到了我需要的东西。

我按照在线教程创建了可以嵌入到html中的交互式控件(https://cran.r-project.org/web/packages/rgl/vignettes/WebGL.html),并且通过大量的努力,我得到了这些控件。问题是它只能在我的计算机上运行,​​只能在Chrome中运行(在Firefox中不起作用,也不适用于Safari)。我问了一个包的创建者,他告诉我该教程是用于markdown的,并且考虑到我更改了html代码,这种奇怪的行为并不令人惊讶。

之后我学习了一些Rmarkdown和html来更好地理解教程,并重新编写代码。现在我有了图,我有按钮,但是当我使用Knitr编译脚本时,按钮不起作用。他们中的一些人什么都不做,有些人则开不同点。

我很抱歉这篇文章的篇幅很长,但我真的尝试了一切,但我找不到解决办法。

以下链接指向我的数据集示例,我的R脚本以及使用Knitr生成的HTML:https://drive.google.com/open?id=0B-fCxMGN3utrbWgtZzhWYVpxSjg

提前非常感谢你!

1 个答案:

答案 0 :(得分:1)

问题在于,至少有两种不同的方案可以在网页中嵌入rgl场景并将按钮链接到rgl场景,并且您可以在不提供"胶水的情况下混合它们#34 ;让他们一起工作。

rglwidget()始终有elementId。通常它是一些随机字符串,但是如果你想引用那个场景,你应该指定一个。

toggleButton()函数使用较旧的方案将场景插入到您的网页中。因此,您需要将elementId转换为它使用的前缀。

所以尝试这样的事情:

```{r results='asis'}
library(rgl)
x <- plot3d(rnorm(10), rnorm(10), rnorm(10))
rglwidget(elementId = "theplot")
elementId2Prefix("theplot")
toggleButton(x["data"], prefix = "theplot")
```