1

rgl部件响应 knitr 代码块选项中指定的图形宽度和高度,例如

```{r fig.width=2, fig.height=2}
library(rgl); example(plot3d);
rglwidget()
```

给出了一个小图(我的屏幕上为 192 x 192)。但是,如果我放入rglwidget()一个可浏览的 tagList,它不会:

```{r fig.width=2, fig.height=2}
library(rgl); example(plot3d)
library(htmltools)
browsable(tagList(rglwidget(), rglwidget()))
```

这给出了两个全尺寸的小部件。调试 Javascript 显示每个都被初始化为 960 x 500,而不是第一个示例中的 192 x 192。

有没有办法说我希望将宽度和高度值传递到 tagList 中的小部件中?

PS这无关rgl; leaflet有同样的问题

```{r fig.width=2, fig.height=2}
library(leaflet); library(htmltools)
browsable(tagList(leaflet() %>% addTiles())
```
4

1 回答 1

4

由于块中的代码可以读取块的选项,因此这里最好的解决方案可能是编写小函数来获取图形大小(以像素为单位),并在小部件的显式设置中使用这些函数。

例如,

```{r fig.width=2, fig.height=2}
library(leaflet); library(htmltools)

# This one is too big:
browsable(tagList(leaflet() %>% addTiles()))

# Get the current figure size in pixels:
w <- function() 
  with(knitr::opts_current$get(c("fig.width", "dpi", "fig.retina")),
       fig.width*dpi/fig.retina)
h <- function() 
  with(knitr::opts_current$get(c("fig.height", "dpi", "fig.retina")),
       fig.height*dpi/fig.retina)

# This is what I wanted:
browsable(tagList(leaflet(width = w(), height = h()) %>% addTiles()))
```
于 2017-03-03T12:01:01.043 回答