我建议使用
transition_manual
并将年份视为类别(失去平稳过渡),或将年份范围转换为数字。
library(tidyverse); library(gganimate)
df1 <- tribble(~Year, ~rate, ~group,
“2012-2014”, 7, “grp1”,
“2015-2017”, 11, “grp1”,
“2018”, 3, “grp1”)
</code>
第一种方法,将年份作为角色保持:
df1 %>%
ggplot(aes(y = rate, x = group)) +
geom_col() +
coord_flip() +
labs(title = “Year: {current_frame}”) +
transition_manual(Year)
</code>
第二种方法,将年份转换为数字。在这种情况下,我刚刚使用了第一年,但您也可以将值分配给平均年份,或者在范围内添加具有每年值的行。
df1 %>%
mutate(Year_numeric = parse_number(Year)) %>%
ggplot(aes(y = rate, x = group)) +
geom_col() +
coord_flip() +
labs(title = “Year: {round(frame_time)}”) +
transition_time(Year_numeric)
</code>
最后,如果要表示给定级别的所有范围年份,可以为所有组件年份创建行。但这需要一些肘部油脂:
df1 %>%
For ranged years, find how many in range:
mutate(year_num = 1 + if_else(Year %>% str_detect(“-“),
str_sub(Year, start = 6) %>% as.numeric() -
str_sub(Year, end = 4) %>% as.numeric(),
0)) %>%
… and use that to make a row for each year in the range
tidyr::uncount(year_num) %>%
group_by(Year) %>%
mutate(Year2 = str_sub(Year, end = 4) %>% as.numeric() +
row_number() - 1) %>%
ungroup() %>%
FYI at this point it looks like:
A tibble: 7 x 4
Year rate group Year2
1 2012-2014 7 grp1 2012
2 2012-2014 7 grp1 2013
3 2012-2014 7 grp1 2014
4 2015-2017 11 grp1 2015
5 2015-2017 11 grp1 2016
6 2015-2017 11 grp1 2017
7 2018 3 grp1 2018
ggplot(aes(y = rate, x = group)) +
geom_col() +
coord_flip() +
labs(title = “Year: {round(frame_time)}”) +
transition_time(Year2)
</code>