Сначала я создаю простой график, экспортирую его как изображение (вручную, а не в коде) и называю его Rplot.png
(сохраните его там, где вы хотите):
plot(mtcars$mpg)
Затем в блестящее приложение, мы должны различать guish две ситуации:
когда приложение запускается, ни одна кнопка не нажата, мы визуализируем изображение с renderImage
когда мы нажимаем на кнопку, мы заменяем renderImage
на renderPlot
и визуализируем интерактивный сюжет
Это означает, что мы должны использовать uiOutput
в ui
части, чтобы мы могли выбрать вывод для изображения или графика в зависимости от ситуации.
Вот пример (я не адаптировал ваш код, но он не должен быть слишком сложным) :
library(shiny)
# determine your path to image here (you should use the package "here" to do so)
ui <- fluidPage(
selectInput("choice", "Choose", choices = names(mtcars)),
actionButton("run", "Run"),
uiOutput("some_ui")
)
server <- function(input, output, session) {
### "Static" part: no click on actionButton yet
output$some_ui <- renderUI({
imageOutput("image_plot")
})
output$image_plot <- renderImage({
list(src = "Rplot.png",
contentType = 'image/png')
}, deleteFile = FALSE) # Do not forget this option
### Click on actionButton
observeEvent(input$run, {
output$some_ui <- renderUI({
plotOutput("dynamic_plot")
})
output$dynamic_plot <- renderPlot({
plot(mtcars[[input$choice]])
})
})
}
shinyApp(ui, server)