Plotly不尊重RMarkdown out.height,有解决方法吗?

时间:2018-05-28 22:11:15

标签: html css r-markdown plotly

我使用R Markdown制作幻灯片(通过slidy输出html)并且需要包含使用plotly创建的图表。幻灯片上的绘图应填充幻灯片的大部分内容,因此我在块选项中将out.widthout.height设置为“95%”,并在绘图布局选项中设置autosize=T。当投影幻灯片时(在更大的屏幕上或通过投影仪在墙上;或者只是调整浏览器窗口的大小),图表的宽度可以很好地缩放以填充窗口 - 而高度保持默认的450px - 而不是95%窗户高度。

但是:如果我调整窗口大小或全屏幕(在RStudio浏览器和Chrome窗口中都有效),那么绘图可以识别相对高度并相应调整大小。除了不是所有幻灯片,只有我调整窗口大小时当前幻灯片。下面是一个示例:该图不会在更大的屏幕上填充整个幻灯片 - 但是在稍微调整浏览器窗口大小之后:

---
title: "Untitled"
output: slidy_presentation
---

```{r, echo=F, out.width = "98%", out.height="95%"}
suppressMessages({library(plotly)})
p = plot_ly(x=~iris[,1],y=~iris[,2] , type="scatter", mode="markers") %>% layout(autosize=T)
p
```

我尝试了各种(大多数是hacky)方法,这些方法与那些与此相关的问题纠结在一起,例如herehere,包括:

  • 将动画设置为FALSE(在某处提示)
  • 搞乱情节对象的内部值(例如设置p $ sizingPolicy $ defaultHeight =“100%”)
  • plot_ly()高度设置为相对%值(这实际上会禁用相对大小调整,即使是调整大小窗口技巧!)
  • 在htmltools :: div(style =“height:95%”)中封装输出(这也会禁用自动调整大小,并使绘图高度更小)
  • 尝试通过在rmd文件中包含自定义css覆盖div.plot-container.plotly,div.svg-container,svg.main-svg和设置{height =“95%”;} - 来覆盖plotly css可以明显改变其他css值,如background-color,而设置高度无效。
  • 在调用javascript relayout函数的this example后面的图中添加一个按钮,该函数重绘了绘图并显然让它知道窗口尺寸,使其成为95%的高度。所以这是有效的,但是必须在每个情节旁边添加一个奇怪的按钮并浏览我的幻灯片并在我出现之前按下每个按钮。

但是没有(除了最后一次黑客攻击)似乎有效。宽度/横向调整大小总是像魅力一样。

我无法判断这是预期的行为还是错误,即使是后者,我也没有时间等待下一个版本;我需要找到一些解决方法。一个显而易见的黑客是在演示之前浏览我的幻灯片,并且每张幻灯片调整一次窗口大小,但是有太多的情节幻灯片可以实现这一点。交互性是我所需要的,因此将情节图绘制为PNG或任何不是解决方案。

TL; DR:如何在R Markdown中立即强制自动调整曲线图,以便plot_ly()图填充幻灯片?

0 个答案:

没有答案