使用 R Markdown 并排绘制 rgl 图
Side-by-side rgl plots with R Markdown
我正在尝试获取两个 3D 散点图,它们是用 rgl 包绘制的,并排在 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)
并设置块选项 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
这里似乎至少有一个,更像是两个错误。稍微修改你的代码,这个:
```{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()
```
在一个短暂可见的设备中生成这个 window:
但这在 R-Studio 预览中 window:
并且 html 文件中的这个加载到 Chrome 浏览器中:
所以只有第一个有效,markdown 似乎破坏了它。
我想说你应该避免在 markdown 中组合多个 rgl 图,直到这个(这些)错误得到修复。可能很难,因为它似乎是各种图形设备和库之间的一些奇怪的交互。
更新
看起来 D (?) 根据他的回答解决了问题,但似乎还有另一个问题在起作用。将此作为信息发布。
这是将边界框装饰转换为 Javascript 代码时的错误。第一个地块的边界延续到第二个地块。由于它们是根据不相关的数量计算得出的,因此您会得到奇怪的盒子。该错误现已在 0.96.1516 版本中修复,目前仅在 R-forge 上。
顺便说一下,当前 rgl
您不需要 hook_webgl
或 library(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 中生成下图:
我正在尝试获取两个 3D 散点图,它们是用 rgl 包绘制的,并排在 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)
并设置块选项 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
这里似乎至少有一个,更像是两个错误。稍微修改你的代码,这个:
```{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()
```
在一个短暂可见的设备中生成这个 window:
但这在 R-Studio 预览中 window:
并且 html 文件中的这个加载到 Chrome 浏览器中:
所以只有第一个有效,markdown 似乎破坏了它。
我想说你应该避免在 markdown 中组合多个 rgl 图,直到这个(这些)错误得到修复。可能很难,因为它似乎是各种图形设备和库之间的一些奇怪的交互。
更新
看起来 D (?) 根据他的回答解决了问题,但似乎还有另一个问题在起作用。将此作为信息发布。
这是将边界框装饰转换为 Javascript 代码时的错误。第一个地块的边界延续到第二个地块。由于它们是根据不相关的数量计算得出的,因此您会得到奇怪的盒子。该错误现已在 0.96.1516 版本中修复,目前仅在 R-forge 上。
顺便说一下,当前 rgl
您不需要 hook_webgl
或 library(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 中生成下图: