プロットを生成して 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」) は表示されません。
またrenderImage
、アプローチ 2 で使用するとError in pngfun: invalid quartz() device size
、actionButton がトリガーされたときに同じエラーが発生します。デフォルトの画像 (「www/heatap.png」) は表示されません。
output$some_ui <- renderImage({
if(input$run==0)return()
list(src = "www/heatmap.png", contentType = 'image/png')
}, deleteFile = FALSE)
アプリケーションの起動時にデフォルト プロットをレンダリングする方法はありますか?