How to create and display an animated GIF in Shiny?

前端 未结 2 1608
粉色の甜心
粉色の甜心 2020-12-28 12:21

I\'m able to load a saved file as an image but unable to use gganimate to do it directly. Alternate ways of rendering GIFs would be nice to know but knowing how

相关标签:
2条回答
  • 2020-12-28 12:29

    I was dealing with the same issue and found only your question and no answers... But the way you phrased it reminded me that renderPlot is finicky:

    it won’t send just any image file to the browser – the image must be generated by code that uses R’s graphical output device system. Other methods of creating images can’t be sent by renderPlot()... The solution in these cases is the renderImage() function. source

    Modifying the code from that article gives you the following:

    library(gapminder)
    library(ggplot2)
    library(shiny)
    library(gganimate)
    theme_set(theme_bw())
    
    ui <- basicPage(
        imageOutput("plot1"))
    
    server <- function(input, output) {
        output$plot1 <- renderImage({
        # A temp file to save the output.
        # This file will be removed later by renderImage
        outfile <- tempfile(fileext='.gif')
    
        # now make the animation
        p = ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, 
          color = continent, frame = year)) + geom_point() + scale_x_log10()
    
        gg_animate(p,"outfile.gif")
    
        # Return a list containing the filename
         list(src = "outfile.gif",
             contentType = 'image/gif'
             # width = 400,
             # height = 300,
             # alt = "This is alternate text"
             )}, deleteFile = TRUE)}
    
    shinyApp(ui, server)
    
    0 讨论(0)
  • 2020-12-28 12:37

    Now that there's a newer breaking version of gganimate, @kt.leap's answer is deprecated. Here's what worked for me with the new gganimate:

    library(gapminder)
    library(ggplot2)
    library(shiny)
    library(gganimate)
    theme_set(theme_bw())
    
    ui <- basicPage(
        imageOutput("plot1"))
    
    server <- function(input, output) {
        output$plot1 <- renderImage({
        # A temp file to save the output.
        # This file will be removed later by renderImage
        outfile <- tempfile(fileext='.gif')
    
        # now make the animation
        p = ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, 
          color = continent)) + geom_point() + scale_x_log10() +
          transition_time(year) # New
    
        anim_save("outfile.gif", animate(p)) # New
    
        # Return a list containing the filename
         list(src = "outfile.gif",
             contentType = 'image/gif'
             # width = 400,
             # height = 300,
             # alt = "This is alternate text"
             )}, deleteFile = TRUE)}
    
    shinyApp(ui, server)
    
    0 讨论(0)
提交回复
热议问题