gganimate with changing scales (axis limits)












2















I'd like to create a gif using gganimate, but my axis ranges vary wildly in one frame. This is causing all subsequent frames to be squeezed.



In ggplot2's facets, there's an option to have scales="free". Is there a way to have free scales in each frame of gganimate?



Here's an example:



library(gapminder)
library(ggplot2)
library(gganimate)
theme_set(theme_bw())

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p)


enter image description here



Now we move one of the data points to some extreme value. This squeezes the points in all subsequent unaffected frames.



gapminder[1, "lifeExp"] <- 1000
gapminder[1, "gdpPercap"] <- 1e60

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p) # smooshed


enter image description here










share|improve this question























  • So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

    – Mike Wise
    Dec 20 '16 at 23:19











  • I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

    – Megatron
    Dec 21 '16 at 2:12











  • But the animation would jump around every frame.

    – Mike Wise
    Dec 21 '16 at 8:09











  • Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

    – Megatron
    Dec 21 '16 at 13:44











  • It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

    – Lennert
    Aug 30 '17 at 11:43
















2















I'd like to create a gif using gganimate, but my axis ranges vary wildly in one frame. This is causing all subsequent frames to be squeezed.



In ggplot2's facets, there's an option to have scales="free". Is there a way to have free scales in each frame of gganimate?



Here's an example:



library(gapminder)
library(ggplot2)
library(gganimate)
theme_set(theme_bw())

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p)


enter image description here



Now we move one of the data points to some extreme value. This squeezes the points in all subsequent unaffected frames.



gapminder[1, "lifeExp"] <- 1000
gapminder[1, "gdpPercap"] <- 1e60

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p) # smooshed


enter image description here










share|improve this question























  • So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

    – Mike Wise
    Dec 20 '16 at 23:19











  • I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

    – Megatron
    Dec 21 '16 at 2:12











  • But the animation would jump around every frame.

    – Mike Wise
    Dec 21 '16 at 8:09











  • Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

    – Megatron
    Dec 21 '16 at 13:44











  • It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

    – Lennert
    Aug 30 '17 at 11:43














2












2








2








I'd like to create a gif using gganimate, but my axis ranges vary wildly in one frame. This is causing all subsequent frames to be squeezed.



In ggplot2's facets, there's an option to have scales="free". Is there a way to have free scales in each frame of gganimate?



Here's an example:



library(gapminder)
library(ggplot2)
library(gganimate)
theme_set(theme_bw())

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p)


enter image description here



Now we move one of the data points to some extreme value. This squeezes the points in all subsequent unaffected frames.



gapminder[1, "lifeExp"] <- 1000
gapminder[1, "gdpPercap"] <- 1e60

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p) # smooshed


enter image description here










share|improve this question














I'd like to create a gif using gganimate, but my axis ranges vary wildly in one frame. This is causing all subsequent frames to be squeezed.



In ggplot2's facets, there's an option to have scales="free". Is there a way to have free scales in each frame of gganimate?



Here's an example:



library(gapminder)
library(ggplot2)
library(gganimate)
theme_set(theme_bw())

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p)


enter image description here



Now we move one of the data points to some extreme value. This squeezes the points in all subsequent unaffected frames.



gapminder[1, "lifeExp"] <- 1000
gapminder[1, "gdpPercap"] <- 1e60

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent,
frame = year)) +
geom_point() +
scale_x_log10()

gganimate(p) # smooshed


enter image description here







r axes gganimate






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 7 '16 at 19:45









MegatronMegatron

5,80864765




5,80864765













  • So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

    – Mike Wise
    Dec 20 '16 at 23:19











  • I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

    – Megatron
    Dec 21 '16 at 2:12











  • But the animation would jump around every frame.

    – Mike Wise
    Dec 21 '16 at 8:09











  • Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

    – Megatron
    Dec 21 '16 at 13:44











  • It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

    – Lennert
    Aug 30 '17 at 11:43



















  • So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

    – Mike Wise
    Dec 20 '16 at 23:19











  • I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

    – Megatron
    Dec 21 '16 at 2:12











  • But the animation would jump around every frame.

    – Mike Wise
    Dec 21 '16 at 8:09











  • Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

    – Megatron
    Dec 21 '16 at 13:44











  • It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

    – Lennert
    Aug 30 '17 at 11:43

















So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

– Mike Wise
Dec 20 '16 at 23:19





So you think it would be useful to have the scales calculated individually at every timestep? I don't see how that would be helpful.

– Mike Wise
Dec 20 '16 at 23:19













I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

– Megatron
Dec 21 '16 at 2:12





I disagree. It would be useful for my application. Much like the facet_wrap() parameter scale="free" in ggplot2

– Megatron
Dec 21 '16 at 2:12













But the animation would jump around every frame.

– Mike Wise
Dec 21 '16 at 8:09





But the animation would jump around every frame.

– Mike Wise
Dec 21 '16 at 8:09













Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

– Megatron
Dec 21 '16 at 13:44





Only if the scale changed dramatically every frame. In my application only a single frame has a vastly different scale similar to the example here.

– Megatron
Dec 21 '16 at 13:44













It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

– Lennert
Aug 30 '17 at 11:43





It's also useful for timeseries, for example here: youtube.com/watch?v=UatUDnFmNTY

– Lennert
Aug 30 '17 at 11:43












1 Answer
1






active

oldest

votes


















2















You can try experimenting with view_follow().



1



Code



p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
geom_point() +
labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
transition_time(year) +
view_follow()

animate(p)





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%2f41026047%2fgganimate-with-changing-scales-axis-limits%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









    2















    You can try experimenting with view_follow().



    1



    Code



    p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
    geom_point() +
    labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
    transition_time(year) +
    view_follow()

    animate(p)





    share|improve this answer




























      2















      You can try experimenting with view_follow().



      1



      Code



      p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
      geom_point() +
      labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
      transition_time(year) +
      view_follow()

      animate(p)





      share|improve this answer


























        2












        2








        2








        You can try experimenting with view_follow().



        1



        Code



        p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
        geom_point() +
        labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
        transition_time(year) +
        view_follow()

        animate(p)





        share|improve this answer














        You can try experimenting with view_follow().



        1



        Code



        p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
        geom_point() +
        labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
        transition_time(year) +
        view_follow()

        animate(p)






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 24 '18 at 22:52









        RomanRoman

        2,1141531




        2,1141531
































            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%2f41026047%2fgganimate-with-changing-scales-axis-limits%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

            Costa Masnaga

            Fotorealismo

            Sidney Franklin