我有来自应用程序的以下示例代码来生成绘图并渲染到 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” )renderImage
。Error 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)
启动应用程序时渲染默认绘图有什么帮助吗?