Creating a smooth transition between two time series bar charts with gganimate
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)
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
add a comment |
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)
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
add a comment |
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)
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
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)
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
r ggplot2 gganimate
edited Nov 25 '18 at 1:18
Roman
2,0791431
2,0791431
asked Nov 24 '18 at 16:49
John HallJohn Hall
83
83
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Use a custom state
variable to group the desired years.
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!
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%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
Use a custom state
variable to group the desired years.
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!
add a comment |
Use a custom state
variable to group the desired years.
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!
add a comment |
Use a custom state
variable to group the desired years.
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!
Use a custom state
variable to group the desired years.
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!
edited Nov 30 '18 at 23:21
answered Nov 24 '18 at 22:21
RomanRoman
2,0791431
2,0791431
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%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
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