R/Shiny App 将绘图写入 RStudio 中的绘图视图而不是 Shiny UI

Posted

技术标签:

【中文标题】R/Shiny App 将绘图写入 RStudio 中的绘图视图而不是 Shiny UI【英文标题】:R/Shiny App Writes Plots to Plot View in RStudio Instead of Shiny UI 【发布时间】:2021-12-14 00:57:43 【问题描述】:

我有一个带有 plotOutput 组件的 Shiny 应用程序:

  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()) 
    )

我使用与前面所示相同的响应式 output$plot_data 调用,但是这一次,pairs() 输出将绘图写入 RStudio 绘图面板而不是 Shiny UI。我在其他类型的情节中也看到了这一点。知道为什么会这样吗?

【问题讨论】:

【参考方案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 中,一切看起来都像绘图,但回报不相等。

【讨论】:

以上是关于R/Shiny App 将绘图写入 RStudio 中的绘图视图而不是 Shiny UI的主要内容,如果未能解决你的问题,请参考以下文章

尝试在本地浏览器中查看时,Docker R Shiny app 0.0.0.0 拒绝连接

将反应输入传递到 R Shiny 中的绘图轴

将 R Shiny Page 导出为 PDF

将 TableTools 用于 R Shiny 中的 DataTables 用于 renderDataTable

R Shiny:备用表格数据和绘图可视化

为啥这个简单的 R Shiny 输出不使用 ggplot 绘图?