将fig.width传递到标签列表

时间:2017-03-01 12:46:02

标签: knitr htmlwidgets

var pos = "1; 2; 3"; var des = "aaa; bbb; ccc"; var pcs = "1.000; 44.000; 65.000"; var posList = pos.Split(';').ToList(); var desList = des.Split(';').ToList(); var pcsList = pcs.Split(';').ToList(); var sb = new StringBuilder(); using (var xw = XmlWriter.Create(sb, new XmlWriterSettings { OmitXmlDeclaration = true })) { var ns = "http://www.example.com"; var prefix = "urn"; xw.WriteStartElement(prefix, "LINES", ns); for (int i = 0; i < posList.Count; i++) { xw.WriteStartElement(prefix, "RECEIVE_EINVOICE_LINE", ns); xw.WriteElementString(prefix, "C00", ns, posList[i]); xw.WriteElementString(prefix, "C14", ns, desList[i]); xw.WriteElementString(prefix, "D00", ns, pcsList[i]); xw.WriteEndElement(); } xw.WriteEndElement(); } var soapMessage = sb.ToString(); 小部件响应knitr代码块选项中指定的图形宽度和高度,例如

rgl

给出一个小图(我屏幕上的192 x 192)。但是,如果我将```{r fig.width=2, fig.height=2} library(rgl); example(plot3d); rglwidget() ``` 放在可浏览的tagList中,则不会:

rglwidget()

这提供了两个完整大小的小部件。调试Javascript显示每个被初始化为960乘500,而不是192乘192,如第一个示例所示。

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

P.S。这与```{r fig.width=2, fig.height=2} library(rgl); example(plot3d) library(htmltools) browsable(tagList(rglwidget(), rglwidget())) ``` 无关; <{1}}在

中遇到同样的问题
rgl

1 个答案:

答案 0 :(得分: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()))
```