Я делаю Shiny-приложение на R. Я использую плотно, чтобы сделать мои ggplots интерактивными, поэтому у меня в приложении много графиков ggplotly. Я хотел бы иметь возможность загружать каждый из них через кнопку на интерфейсе.
Моя кнопка загрузки работает для обычных объектов ggplot, но не для объектов ggplotly. Простой воспроизводимый пример:
library(shiny)
library(ggplot2)
library(processx) # for orca()
library(plotly)
ui <- fluidPage(
mainPanel(plotlyOutput("plot1"), downloadButton('download1', 'Download Graph'))
)
server <- function(input,output){
make_plot1 <- function(){
p1 = ggplot(cars, aes(x = speed, y = dist)) + geom_point()
return(ggplotly(p1))}
output$plot1 <- renderPlotly({ make_plot1() })
output$download1 <- downloadHandler(
filename = function() {'plot1.png'},
content = function(file) {
# try 1
png(file)
print(make_plot1())
# try 2
#plotly_IMAGE(make_plot1(), format = "png", out_file = file)
# try 3
#orca(make_plot1(), file)
#try 4
#export(make_plot1(), file = file)
dev.off()
})
}
shinyApp(ui, server)
Некоторые вещи, которые я пробовал, закомментированы в этом коде.
Попытка 1 основана на , как я обычно работаю с объектами печати в блестящем приложении
Try 2 основан на этот вопрос и этот пост
Try 3 основан на некоторой сюжетной документации
Try 4 основан на этот вопрос
Все эти попытки либо загружают пустой .png (попытка 1), либо просто ничего не скачивают (попытки 2-4). Я подозреваю, что я не совсем правильно использую обработчик загрузки. У кого-нибудь есть предложения, как заставить это работать?
РЕДАКТИРОВАТЬ: В этом случае я хочу .png файлы, но есть несколько хороших ответов на эту тему для загрузки интерактивных .html файлов.