【发布时间】:2018-08-07 09:16:25
【问题描述】:
我打算制作一个闪亮的应用程序,用户上传一个包含位置数据的文件,应用程序返回一个显示这些位置数据的动画 gif(在完成一些计算之后)。当应用程序在我的计算机上本地运行时,一切正常。
此外,在线运行时,大多数元素都能正常工作。我无法弄清楚的是,当应用程序部署在 shinyapps.io 时,如何将动画 gif 返回给用户。无论我尝试通过 renderImage 还是在 downloadButton 中返回它,都会出现问题。
我尝试过无数种 SaveGIF 和 gganimate 的组合,以及 downloadHandler 或 renderImage。我曾在here、here 和here 中寻找灵感,仅举几例。 我也看到过类似问题的帖子(例如,here)。我慢慢开始对此失去理智,非常感谢解决方案或提示。
我很确定关于闪亮在线的内部文件存储规则和系统,我只是不明白。例如,将(计算的)数据的 png 文件返回到 renderImage 或 downloadHandler(如here) 工作正常。但是,当输出格式为 gif 时,我永远不会正确。
下面显示了一个使用 renderImage 的尝试。我已经从文件输入的东西中抽象出来了,所以下面的最小可重现示例制作了一个简单的虚拟数据集,并在单独的图片中动画后将其放入临时目录。当应用程序在审阅窗格中时,它可以正常工作。部署后,我得到“这是替代文本”。似乎我可以在临时目录中看到单个图像,但不知何故动画 GIF 丢失了。关于如何在浏览器中以图像或准备下载的文件的形式返回动画 GIF 的解决方案或提示,我会非常高兴,不会激动。
library(shiny)
library(animation)
#UI
ui <- basicPage(
imageOutput("plot1")
)
#Server
server <- function(input, output) {
data1_reactive <- reactive({
x <- c(1,2,3)
y <- c(2,4,5)
data_try <- data.frame(x,y)
return(data_try)
})
output$plot1 <- renderImage({
saveGIF(
for (i in 1:3) {
plot(data1_reactive()$x,data1_reactive()$y,type="p",col="black",xlim=c(0,10),ylim=c(0,10),pch=19)
lines(data1_reactive()[i,]$x,data1_reactive()[i,]$y,type="p",col="red",xlim=c(0,10),ylim=c(0,10),pch=19)
ani.pause()}, movie.name = 'test.gif', interval = 0.3,ani.width = 1400, ani.height = 900,outdir=tempdir())
# Return a list containing the filename
list(src = paste0(tempdir(),"/test.gif"),
contentType = 'image/gif',
alt = "This is alternate text"
)}, deleteFile = FALSE)
}
shinyApp(ui, server)
【问题讨论】:
-
你见过这个吗? groups.google.com/forum/#!topic/shiny-discuss/32WtTVOqYK0。看看温斯顿的回答。
-
是的,至少我见过类似的方法。如果我应该合并 Winston 的评论,我会像这样更改 output$plot1:。但是,不幸的是,我得到了完全相同的结果。在 saveGIF 之前,我会添加: filename
标签: shiny shiny-server