1

我有来自应用程序的以下示例代码来生成绘图并渲染到 UI。

library(shiny)

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
plotOutput("some_ui")
)

server <- function(input, output, session) {

output$some_ui <- renderPlot({
if(input$run==0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

这不是一个工作示例,因为它包含一个自定义函数来生成绘图。这种方法有效。

但是,我需要在应用程序启动时和单击操作按钮之前显示默认图。我尝试了几种方法。

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
plotOutput("some_ui")
)

server <- function(input, output, session) {

output$some_ui <-  renderUI({
if(input$run == 0)return()
  list(src = "www/heatmap.png")
})

output$some_ui <- renderPlot({
if(input$run == 0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

这不会呈现默认绘图,但在单击操作按钮时可以正常工作。

方法2:plotOutput改为uiOutput

ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
uiOutput("some_ui")
)

server <- function(input, output, session) {
output$some_ui <-  renderUI({
if(input$run==0)return()
  list(src = "/www/heatmap.png")
})

output$some_ui <- renderPlot({
if(input$run == 0) return()
withProgress(message = paste("Drawing heatmap, please wait."),{
heatmap_render(x,y)    ##custom function to generate plot###
})
})
}

这会在Error in pngfun: invalid quartz() device size触发 actionButton 时给出错误。并且未显示默认图像(“www/heatap.png”)。

当触发 actionButton 时,在方法 2 中使用也会产生相同的错误。并且未显示默认图像(“www/heatap.png” )renderImageError in pngfun: invalid quartz() device size

 output$some_ui <-  renderImage({
 if(input$run==0)return()
  list(src = "www/heatmap.png", contentType = 'image/png')
  }, deleteFile = FALSE)

启动应用程序时渲染默认绘图有什么帮助吗?

4

0 回答 0