Creating a smooth transition between two time series bar charts with gganimate












1















I am attempting to make an animation with gganimate that starts with the past 10 years of crime data. Once the animation starts, I would like to add historical years going back to 1970 (when crime was much higher). This would appear as a "zoom out" with free axes.
So far, I can start with 2018 and add years sequentially backwards like this:



# Create dataset
dat <- tibble(year = 1970:2018)
dat$crime <- 100 * exp(-0.02*(dat$year-1970))


p <- ggplot(dat, aes(x=year, y = crime)) +
geom_bar(stat = "identity") +
transition_states(-year, transition_length = 4, state_length = 2) +
view_follow() + shadow_mark()

animate(p)


CrimeAnimation



I am having difficulty starting with a 10 year historical plot (instead of just one year), prior to zooming out to the past 30-40 years. Any help would be appreciated!










share|improve this question





























    1















    I am attempting to make an animation with gganimate that starts with the past 10 years of crime data. Once the animation starts, I would like to add historical years going back to 1970 (when crime was much higher). This would appear as a "zoom out" with free axes.
    So far, I can start with 2018 and add years sequentially backwards like this:



    # Create dataset
    dat <- tibble(year = 1970:2018)
    dat$crime <- 100 * exp(-0.02*(dat$year-1970))


    p <- ggplot(dat, aes(x=year, y = crime)) +
    geom_bar(stat = "identity") +
    transition_states(-year, transition_length = 4, state_length = 2) +
    view_follow() + shadow_mark()

    animate(p)


    CrimeAnimation



    I am having difficulty starting with a 10 year historical plot (instead of just one year), prior to zooming out to the past 30-40 years. Any help would be appreciated!










    share|improve this question



























      1












      1








      1








      I am attempting to make an animation with gganimate that starts with the past 10 years of crime data. Once the animation starts, I would like to add historical years going back to 1970 (when crime was much higher). This would appear as a "zoom out" with free axes.
      So far, I can start with 2018 and add years sequentially backwards like this:



      # Create dataset
      dat <- tibble(year = 1970:2018)
      dat$crime <- 100 * exp(-0.02*(dat$year-1970))


      p <- ggplot(dat, aes(x=year, y = crime)) +
      geom_bar(stat = "identity") +
      transition_states(-year, transition_length = 4, state_length = 2) +
      view_follow() + shadow_mark()

      animate(p)


      CrimeAnimation



      I am having difficulty starting with a 10 year historical plot (instead of just one year), prior to zooming out to the past 30-40 years. Any help would be appreciated!










      share|improve this question
















      I am attempting to make an animation with gganimate that starts with the past 10 years of crime data. Once the animation starts, I would like to add historical years going back to 1970 (when crime was much higher). This would appear as a "zoom out" with free axes.
      So far, I can start with 2018 and add years sequentially backwards like this:



      # Create dataset
      dat <- tibble(year = 1970:2018)
      dat$crime <- 100 * exp(-0.02*(dat$year-1970))


      p <- ggplot(dat, aes(x=year, y = crime)) +
      geom_bar(stat = "identity") +
      transition_states(-year, transition_length = 4, state_length = 2) +
      view_follow() + shadow_mark()

      animate(p)


      CrimeAnimation



      I am having difficulty starting with a 10 year historical plot (instead of just one year), prior to zooming out to the past 30-40 years. Any help would be appreciated!







      r ggplot2 gganimate






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 25 '18 at 1:18









      Roman

      2,0791431




      2,0791431










      asked Nov 24 '18 at 16:49









      John HallJohn Hall

      83




      83
























          1 Answer
          1






          active

          oldest

          votes


















          0















          Use a custom state variable to group the desired years.



          1



          Data



          dat <- tibble(year = 1970:2018)
          dat$crime <- 100 * exp(-0.02*(dat$year-1970))

          # state variable called "time" for grouping
          dat$time <- c(40:2, rep(1, 10))


          Code



          p <- ggplot(dat, aes(x = year, y = crime)) +
          geom_col() +
          # states depend on "time", not "year"
          transition_states(time, transition_length = 4, state_length = 2) +
          view_follow() + shadow_mark()

          animate(p)


          PS: That was a really concise, well-formatted, and reproducible first question! Keep it up!






          share|improve this answer

























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460334%2fcreating-a-smooth-transition-between-two-time-series-bar-charts-with-gganimate%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0















            Use a custom state variable to group the desired years.



            1



            Data



            dat <- tibble(year = 1970:2018)
            dat$crime <- 100 * exp(-0.02*(dat$year-1970))

            # state variable called "time" for grouping
            dat$time <- c(40:2, rep(1, 10))


            Code



            p <- ggplot(dat, aes(x = year, y = crime)) +
            geom_col() +
            # states depend on "time", not "year"
            transition_states(time, transition_length = 4, state_length = 2) +
            view_follow() + shadow_mark()

            animate(p)


            PS: That was a really concise, well-formatted, and reproducible first question! Keep it up!






            share|improve this answer






























              0















              Use a custom state variable to group the desired years.



              1



              Data



              dat <- tibble(year = 1970:2018)
              dat$crime <- 100 * exp(-0.02*(dat$year-1970))

              # state variable called "time" for grouping
              dat$time <- c(40:2, rep(1, 10))


              Code



              p <- ggplot(dat, aes(x = year, y = crime)) +
              geom_col() +
              # states depend on "time", not "year"
              transition_states(time, transition_length = 4, state_length = 2) +
              view_follow() + shadow_mark()

              animate(p)


              PS: That was a really concise, well-formatted, and reproducible first question! Keep it up!






              share|improve this answer




























                0












                0








                0








                Use a custom state variable to group the desired years.



                1



                Data



                dat <- tibble(year = 1970:2018)
                dat$crime <- 100 * exp(-0.02*(dat$year-1970))

                # state variable called "time" for grouping
                dat$time <- c(40:2, rep(1, 10))


                Code



                p <- ggplot(dat, aes(x = year, y = crime)) +
                geom_col() +
                # states depend on "time", not "year"
                transition_states(time, transition_length = 4, state_length = 2) +
                view_follow() + shadow_mark()

                animate(p)


                PS: That was a really concise, well-formatted, and reproducible first question! Keep it up!






                share|improve this answer
















                Use a custom state variable to group the desired years.



                1



                Data



                dat <- tibble(year = 1970:2018)
                dat$crime <- 100 * exp(-0.02*(dat$year-1970))

                # state variable called "time" for grouping
                dat$time <- c(40:2, rep(1, 10))


                Code



                p <- ggplot(dat, aes(x = year, y = crime)) +
                geom_col() +
                # states depend on "time", not "year"
                transition_states(time, transition_length = 4, state_length = 2) +
                view_follow() + shadow_mark()

                animate(p)


                PS: That was a really concise, well-formatted, and reproducible first question! Keep it up!







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 30 '18 at 23:21

























                answered Nov 24 '18 at 22:21









                RomanRoman

                2,0791431




                2,0791431
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460334%2fcreating-a-smooth-transition-between-two-time-series-bar-charts-with-gganimate%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    404 Error Contact Form 7 ajax form submitting

                    How to know if a Active Directory user can login interactively

                    TypeError: fit_transform() missing 1 required positional argument: 'X'