【问题标题】:interactive 3D plots in markdown file - not working anymore?降价文件中的交互式 3D 绘图 - 不再工作?
【发布时间】:2016-02-03 10:24:07
【问题描述】:

几个月前,我想在 Markdown 文件中嵌入一个 3D 交互式绘图。 查看以前的问题,我发现 this,效果很好(谢谢,顺便说一句)。

但是,当我今天再次尝试重新执行此操作时,我只能用鼠标放大和缩小,而无法旋转图形。我还检查了我之前制作并使用过的降价文件,我也遇到了同样的问题。这发生在 Rstudio“浏览器”的东西(你编织后弹出的东西)和 Chrome 中。

这里有两个例子,一个带有 rgl 包,一个带有 car 包,都对我不起作用(都曾经起作用):

1

```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```
```{r, rgl=TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))
```

2

```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```
```{r testgl, webgl=TRUE}
library(car)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
scatter3d(x, y, z , point.col = "blue", surface=FALSE, xlab = "", ylab = "C", zlab = "")
```

我正在使用 Rstudio 0.99.489,我已经更新了所有软件包并使用 R 3.2.3

sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] car_2.1-1     rgl_0.95.1441

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.3        lattice_0.20-33    digest_0.6.9       MASS_7.3-45        grid_3.2.3         MatrixModels_0.4-1
 [7] nlme_3.1-122       SparseM_1.7        minqa_1.2.4        nloptr_1.0.4       Matrix_1.2-3       rmarkdown_0.9.2   
[13] splines_3.2.3      lme4_1.1-10        tools_3.2.3        parallel_3.2.3     pbkrtest_0.4-6     yaml_2.1.13       
[19] mgcv_1.8-9         htmltools_0.3      nnet_7.3-11        quantreg_5.19

感谢大家的帮助

【问题讨论】:

    标签: r knitr r-markdown rgl


    【解决方案1】:

    在联系了谢一辉博士(knitrdeveloper)和 John Fox 教授(cardeveloper)后,我认为我可以发布两个选项来解决这个问题。

    :这些解决方案都是谢博士和Fox教授的工作成果,我想利用这个平台感谢他们花时间回答我的问题。

    第一个选项(无需更新)

    在调用scatter3d() 之前立即调用next3d() 会创建一个可以在HTML 中缩放和旋转的图。以这个简单的代码为例:

    ```{r setup}
    library(knitr)
    library(rgl)
    knit_hooks$set(webgl = hook_webgl)
    ```
    
    ```{r, webgl=TRUE}
    library(car)
    x <- sort(rnorm(1000))
    y <- rnorm(1000)
    z <- rnorm(1000) + atan2(x,y)
    next3d()
    scatter3d(x, y, z, col=rainbow(1000))
    ```
    

    第二个选项(需要更新包)

    Fox 教授已将 scatter3d() 函数修改为单独调用 next3d()(而不是 rgl.clear()),从而无需在每次调用 scatter3d() 之前手动调用 next3d()。我已经在我的 Windows 机器上对其进行了测试,并且可以报告它可以工作。

    要安装修改后的包,请使用:

    install.packages("car", repos="http://R-Forge.R-project.org") 
    

    【讨论】:

    • 这两种解决方案似乎都不能解决我的问题。你能检查你的代码吗?
    • 修复了代码。你能再检查一次吗?它现在对我有用。我使用 plot3d() 而不是 scatter3d() 并且没有使用 webgl=TRUE。
    【解决方案2】:

    尝试使用threejs

    它可以正常工作,而且 IMO 看起来更好

    ```{r, echo=FALSE}
    library(threejs)
    x <- sort(rnorm(1000))
    y <- rnorm(1000)
    z <- rnorm(1000) + atan2(x,y)
    scatterplot3js(x, y, z,  color=rainbow(1000), renderer="canvas")
    ```
    

    【讨论】:

    • 感谢您的帮助!它确实有效,但我需要“汽车”包中的附加功能 - 回归表面、聚类等,我已经查看了该包,但截至目前,似乎无法确定该包是否提供此功能。
    【解决方案3】:

    首先尝试安装rglwidget包install.packages('rglwidget')

    接下来,当在代码块之间添加空格时,您的示例 1 似乎可以工作

    ```{r setup}
    library(knitr)
    library(rgl)
    knit_hooks$set(webgl = hook_webgl)
    ```
    
    ```{r, webgl=TRUE}
    x <- sort(rnorm(1000))
    y <- rnorm(1000)
    z <- rnorm(1000) + atan2(x,y)
    plot3d(x, y, z, col=rainbow(1000))
    ```
    

    我不确定为什么示例 2 不再有效

    【讨论】:

    • 感谢您的帮助,但安装 rglwidget 似乎没有帮助。你在用窗户吗?
    • 是的,我发现有趣的是,如果我删除代码块之间的换行符,这将不再适用于我的机器
    • 一般我建议使用rgl::setupKnitr 函数而不是自己调用knit_hooks()rglknitr 之间的接口最近发生了很大变化; setupKnitr 应该跟上变化。
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 2016-11-16
    • 1970-01-01
    • 2020-07-02
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多