Я делаю слайды, используя 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
```
Я пробовал различные (в основном хакерские) методы, предложенные людьми, которыестолкнулись с проблемами, связанными с этим, такими как здесь и здесь , в том числе:
- установка анимации на FALSE (было предложено где-то)
- возиться с внутренними значениями объекта plotly (например, настройка p $ sizingPolicy $ defaultHeight = "100%")
- установка
plot_ly()
высоты в относительное значение% (это фактически отключает относительное изменение размера, даже дляхитрость изменения размера окна!) - обтекание вывода в виде графика в htmltools :: div (style = "height: 95%") (это также отключает автоматическое изменение размера и делает высоту графика еще меньше)
- пытается перезаписать css в графическом режиме, включив пользовательский css в файл rmd с адресом div.plot-container.plotly, div.svg-container, svg.main-svg и установив {height = "95%";} - могуVisменяйте другие значения CSS, например
background-color
, в то время как установка высоты не имеет никакого эффекта. - добавление кнопки к графику после этого примера , вызывающего функцию javascript
relayout
, которая перерисовывает графики, по-видимому, информирует его о размерах окна, делая его намеченным на 95% высоты.Так что это работает, но потребует добавления странной кнопки рядом с каждым графиком, просмотра моих слайдов и нажатия каждой из них перед тем, как я представлю.
Но, похоже, ничего (кроме последнего хака) не работает.Несмотря на то, что ширина / горизонтальное изменение размера всегда работает как шарм.
Я не могу сказать, является ли это предполагаемым поведением или ошибкой, и даже если последнее, у меня действительно нет времени ждать следующей версии;Мне нужно найти обходной путь.Очевидный хак - это просмотреть мои слайды перед презентацией и изменить размер окна один раз для каждого слайда, но слишком много графиков с сюжетными слайдами, чтобы это было жизнеспособным.И интерактивность - это то, что мне нужно, поэтому рендеринг сюжетных графиков в формате PNG или чего-либо еще не является решением.
TL; DR: как принудительно автоматически масштабировать сюжетные графики, немедленно соблюдайте параметр out.height в R Markdown, чтобыplot_ly () участок будет заполнять слайд?