有没有办法创建一个范围为过渡时间的动画(gganimate)?


文艺青年3
2025-04-09 12:18:49 (3天前)


有没有什么方法可以为多年的过渡时间做出有意义的工作?在我的数据中,我有三个时间点,其中两个是如下所示的范围。

数据:

年率组
2012 -…

2 条回复
  1. 0# 不想吃东西 | 2019-08-31 10-32



    我建议使用

    transition_manual

    并将年份视为类别(失去平稳过渡),或将年份范围转换为数字。




    1. library(tidyverse); library(gganimate)
      df1 <- tribble(~Year, ~rate, ~group,
      2012-2014”, 7, grp1”,
      2015-2017”, 11, grp1”,
      2018”, 3, grp1”)

    2. </code>


    第一种方法,将年份作为角色保持:




    1. df1 %>%
      ggplot(aes(y = rate, x = group)) +
      geom_col() +
      coord_flip() +
      labs(title = Year: {current_frame}”) +
      transition_manual(Year)

    2. </code>







    第二种方法,将年份转换为数字。在这种情况下,我刚刚使用了第一年,但您也可以将值分配给平均年份,或者在范围内添加具有每年值的行。




    1. 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)

    2. </code>







    最后,如果要表示给定级别的所有范围年份,可以为所有组件年份创建行。但这需要一些肘部油脂:




    1. df1 %>%

    2. 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)) %>%

    3. 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() %>%

    4. 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)

    5. </code>






登录 后才能参与评论