Полностью не уважает RMarkdown out.height, есть ли обходной путь? - PullRequest
0 голосов
/ 29 мая 2018

Я делаю слайды, используя 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 () участок будет заполнять слайд?

...