Как отрисовать график по умолчанию в R блестящий - PullRequest
0 голосов
/ 23 марта 2020

Ниже приведен пример кода из приложения для генерации графика и рендеринга в пользовательский интерфейс.

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)

Любая помощь для отображения графика по умолчанию при запуске приложения?

...