gganimate with changing scales (axis limits)
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)
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
r axes gganimate
add a comment |
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)
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
r axes gganimate
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
add a comment |
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)
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
r axes gganimate
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)
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
r axes gganimate
r axes gganimate
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
You can try experimenting with view_follow()
.
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)
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
You can try experimenting with view_follow()
.
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)
add a comment |
You can try experimenting with view_follow()
.
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)
add a comment |
You can try experimenting with view_follow()
.
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)
You can try experimenting with view_follow()
.
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)
answered Nov 24 '18 at 22:52
RomanRoman
2,1141531
2,1141531
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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