Отрисовка графика внутри скрытого элемента контейнера на Shiny - PullRequest
0 голосов
/ 01 октября 2019

Довольно простая проблема ... Я получаю сообщение об ошибке Error: unable to start png() device при попытке преобразовать график в невидимое div (см. Пример ниже).

Я пытался приблизиться кпроблема, создав блестящий модуль, но не уверен, что решит основную проблему.

Я еще не пробовал shinyjs (круто, если это решение, но я бы предпочел избежать зависимости от пакета, если это возможно).

Как sidenote, я бы хотелизбегайте рендеринга в видимый элемент вне экрана / в низком z-порядке, чтобы лучше понять, как блестяще справляется со скрытыми элементами. Обратите внимание, что фактический график основан на реактивном содержимом, которое может изменяться, пока контейнер div скрыт, и полученный график должен быть интерактивным (кисть / зависание / и т. Д.).

Обновление : я установил пакет Cairo как попытку решения и теперь получаю сообщение об ошибке Error: Failed to create Cairo backend (также пытался напрямую вызывать png() и Cairo() в блоке obeserve({}), без какого-либо другого эффекта).

RepEx:

require(tidyverse)
require(shiny)

a_plot <- tibble(x=1:10,y=rnorm(10)) %>% ggplot(aes(x=x,y=y)) + geom_point()

server <- function(input, session, output) {
  output$p1 <- renderPlot({a_plot})
  output$p2 <- renderPlot({a_plot})
  outputOptions(output,’p2’, suspendWhenHidden=FALSE)
}

ui <- fluidPage(
  fluidRow(plotOutput(‘p1’)),
  fluidRow(div(id=‘plot_container’, style=‘display: none’, plotOutput(‘p2’))),
  withTags(head(script(HTML(‘window.onmouseover = function(event) {document.getElementById(“plot_container”).style.display = “block” }’))))
)

shinyApp(ui=ui, server=server)

Ожидаемый результат:

При наведении курсора на веб-страницу появляются два графика.

Environment

R 3.6.0на Windows 10

1 Ответ

0 голосов
/ 08 октября 2019

Указание явных значений для параметров 'height' и 'width' в renderPlot() устранит ошибку. Смотрите Блестящий выпуск Github # 1409

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...