Приложение R/Shiny Записывает графики для просмотра в RStudio Вместо блестящего пользовательского интерфейса

#r #plot #shiny #rstudio #reactive

Вопрос:

У меня есть блестящее приложение с компонентом вывода графика:

   plotOutput("plot_data")
 

Используя библиотеку vis_dat, я записываю в plot_data следующее:

   observeEvent(input$missing, { # Click the Missing actionButton
    v$plot_data <- vis_miss(new_data())
    })  
 

и…

   output$plot_data <- renderPlot({
    if (is.null(v$plot_data)) return()
    v$plot_data
  })
 

Это прекрасно работает. Теперь я также (пытаюсь) написать в тот же компонент, используя функцию pairs (), вот так:

   observeEvent(input$pairs, {  # Click the Pairs actionButton
    v$plot_data <- pairs(new_data()) 
    })
 

Я использую тот же вызов reactive output$plot_data, как показано ранее, но на этот раз вывод pairs() записывает график на панель построения RStudio вместо блестящего пользовательского интерфейса. Я видел это и с другими типами сюжетов. Есть идеи, почему это может быть?

Ответ №1:

Функции построения графиков в R, такие как hist() , plot() , и pairs() визуализация изображений, а не графиков. Поэтому я использовал renderImage() функцию следующим образом:

   output$image_data <- renderImage({
    width  <- session$clientData$output_image_data_width
    height <- session$clientData$output_image_data_height
    
    outfile <- tempfile(fileext='.png')
    png(outfile, width=width, height=height)
    plot(new_data(), pch=20 , cex=1.5 , col="#69b3a2")
    dev.off()
    
    list(
      src = outfile,
      width = width,
      height = height
      )
    }, 
  deleteFile = TRUE
  )
 

В RStudio все это выглядит как графики, но отдача не одинакова.