带有R Markdown的并排rgl图

时间:2016-09-01 21:26:18

标签: r knitr r-markdown rgl

我正在尝试使用rgl包绘制两个3D散点图,并在R Markdown文档中并排显示。例如:

mfrow3d(nr = 1, nc = 2, sharedMouse = TRUE)  
plot3d(mtcars[, 1:3], type = "s")  
plot3d(mtcars[, 4:6], type = "s")
rglwidget()

这在直接在控制台中运行时非常有效,但是当使用R Markdown编织到HTML文档时,似乎只渲染了第二个图。

我尝试添加knit_hooks$set(webgl = hook_webgl)并设置chunk选项webgl = TRUE,但这也无济于事。

任何建议都将不胜感激。

这是我sessionInfo()的输出:

R version 3.3.1 (2016-06-21)
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   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

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

other attached packages:
 [1] rgl_0.96.0           tidyr_0.6.0          dplyr_0.5.0          smacof_1.8-13       
 [5] emojifont_0.3.3      gridExtra_2.2.1      knitr_1.14           MASS_7.3-45         
 [9] shinydashboard_0.5.1 shiny_0.13.2         RColorBrewer_1.1-2   ggplot2_2.1.0       

loaded via a namespace (and not attached):
 [1] gtools_3.5.0        splines_3.3.1       lattice_0.20-33     colorspace_1.2-6   
 [5] htmltools_0.3.5     yaml_2.1.13         base64enc_0.1-3     chron_2.3-47       
 [9] survival_2.39-4     DBI_0.5             foreign_0.8-66      plyr_1.8.4         
[13] stringr_1.1.0       munsell_0.4.3       gtable_0.2.0        htmlwidgets_0.7    
[17] evaluate_0.9        latticeExtra_0.6-28 httpuv_1.3.3        proto_0.3-10       
[21] Rcpp_0.12.6         acepack_1.3-3.3     xtable_1.8-2        polynom_1.3-8      
[25] scales_0.4.0        formatR_1.4         showtext_0.4-4      gdata_2.17.0       
[29] jsonlite_1.0        Hmisc_3.17-4        sysfonts_0.5        mime_0.5           
[33] weights_0.85        digest_0.6.10       stringi_1.1.1       showtextdb_1.0     
[37] grid_3.3.1          tools_3.3.1         magrittr_1.5        tibble_1.2         
[41] Formula_1.2-1       mice_2.25           cluster_2.0.4       Matrix_1.2-6       
[45] rsconnect_0.4.3     data.table_1.9.6    nnls_1.4            assertthat_0.1     
[49] rmarkdown_1.0.9013  R6_2.1.3            rpart_4.1-10        nnet_7.3-12

2 个答案:

答案 0 :(得分:8)

这是将边界框装饰转换为Javascript代码的错误。第一个情节的界限延续到第二个情节。由于它们是根据不相关的数量计算出来的,因此产生了奇怪的盒子。该错误现已修复为0.96.1516版本,目前仅适用于R-forge。

顺便说一句,使用当前rgl,您不需要hook_webgllibrary(rglwidgets)。如果要插入图表,只需使用library(rgl)并调用rglwidget()即可。 (有一种方法可以在没有rglwidget()调用的情况下自动插入绘图,但我不推荐它。)

所以你的文件看起来像这样:

```{r echo=TRUE}
library(rgl)
mfrow3d(nr = 1, nc = 2, sharedMouse = TRUE)  
plot3d(mtcars[, 1:3], type = "s",)  
plot3d(mtcars[, 4:6], type = "s")
rglwidget()
```

这会在rgl 0.96.1516:

中生成下面的图片

enter image description here

答案 1 :(得分:2)

这里似乎至少有一个,更像是两个错误。稍微修改你的代码,这个:

```{r echo=T}
library(rgl)
library(rglwidget)
library(knitr)
knit_hooks$set(webgl = hook_webgl)

mfrow3d(nr = 2, nc = 2, sharedMouse = T)  
plot3d(mtcars[, 1:3], type = "s",)  
plot3d(mtcars[, 4:6], type = "s")
plot3d(mtcars[, 1:3], type = "s")  
plot3d(mtcars[, 4:6], type = "s")
rglwidget()
```

在短暂可见的设备窗口中生成:

enter image description here

但在R-Studio预览窗口中显示:

enter image description here

这是在加载到Chrome浏览器的html文件中:

enter image description here

所以只有第一个有效,而降价似乎打破了它。

我会说你应该避免在markdown中编写多个rgl图,直到这些(这些)错误得到修复。可能很难,因为它似乎是各种图形设备和库之间的一些奇怪的交互。

更新

看起来D(?)根据他的答案解决了问题,但似乎还有另一个问题在起作用。将此信息作为信息发布。

enter image description here