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

use*_*004 5 html css r-markdown plotly

我正在使用 R Markdown(通过 html 输出slidy)制作幻灯片,并且需要包含使用plotly. 幻灯片上的绘图应该填满幻灯片的大部分,所以我在块选项中将out.width和设置out.height为“95%”,并autosize=T在绘图布局选项中设置。当幻灯片被投影时(在更大的屏幕上或通过投影仪投射到墙上;或者只是调整浏览器窗口的大小),绘图的宽度可以很好地缩放以填充窗口 - 而高度保持在默认的 450 像素 - 而不是 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
```
Run Code Online (Sandbox Code Playgroud)

我尝试了各种(主要是hacky)方法,这些方法是由与此相关的问题纠缠在一起的人建议的,例如here和here,包括:

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

但是没有任何东西(除了最后一次黑客)似乎有效。虽然宽度/水平调整大小总是很有魅力。

我不知道这是预期的行为还是错误,即使是后者,我也没有时间等待下一个版本;我需要找到一些解决方法。一个明显的技巧是在演示之前浏览我的幻灯片,并为每张幻灯片调整一次窗口大小,但是有太多带有情节幻灯片的图,这不可行。而交互性正是我所需要的,因此将绘图渲染为 PNG 或其他任何东西都不是解决方案。

TL;DR:如何强制自动调整绘图大小,立即尊重 R Markdown 中的 out.height 参数,以便 plot_ly() 绘图填充幻灯片?