Как вставить снимок rgl в виньетку пакета Rmarkdown

Я создал виньетку R. для моей посылки. Эта виньетка вставляет интерактивную фигуру rgl с webGL.

---
title: "title"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{title}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

```r
rgl::plot3d(runif(10), runif(10), runif(10))
```

```{r, echo = FALSE}
rgl::plot3d(runif(10), runif(10), runif(10))
rgl::rglwidget()
```

Он отлично работает, но убит для моих нужд. Простая неинтерактивная картинка была бы достаточно хороша. Проблема отображения webGL заключается в том, что он создает большой файл (>1 Мб). Таким образом, у меня есть ПРИМЕЧАНИЕ на CRAN о размере каталога. Вместо того, чтобы спорить об этом ПРИМЕЧАНИЕ, я хотел бы уменьшить размер вывода html, используя обычную картинку.

rgl::plot3d(runif(10), runif(10), runif(10))
rgl::rgl.snapshot()

Это, очевидно, не работает.

1 ответ

Решение

Вам нужно использовать старый hook_rgl метод, описанный в knitr документы и обновляются в rgl, Например, эти куски вставят фигуру PNG:

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
rgl::setupKnitr()
```

```{r rgl=TRUE, dev='png'}
rgl::plot3d(runif(10), runif(10), runif(10))
```
Другие вопросы по тегам