2017-03-01 88 views
0

rgl小部件響應knitr代碼塊選項中指定的數字寬度和高度,例如,將fig.width傳遞到標記列表

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

給出一個小圖(192 x 192在我的屏幕上)。但是,如果我在可瀏覽的標記表把rglwidget(),它不會:

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

這給了兩個全尺寸的小部件。調試Javascript顯示每個被初始化爲960乘以500,而不是192乘以192,如第一個例子。

有沒有辦法說,我想寬度和高度值傳遞到tagList中的小部件?

P.S.這與rgl無關; leaflet

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

回答

1

由於在大塊代碼相同的問題可以讀取的塊的選項,可能是最好的解決方案是編寫獲得的像素圖的尺寸小的功能,並使用這些中在小部件中的顯式設置。

例如,

```{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())) 
```