代码之家  ›  专栏  ›  技术社区  ›  Nautica

在gganimate的transition_中使用标题表达式中的替代变量?

  •  0
  • Nautica  · 技术社区  · 6 年前

    我感兴趣的是在每个帧的标题标签信息中使用时间间隔变量之外的替代变量。

    包维护人员提到这通常是不可能的,但提供了一个小的变通示例 here . 然而,在他的示例中,只有当使用的时间变量方便地匹配为数据帧中每个元素的索引时,它才起作用。

    对于大多数其他应用程序,这是不现实的。例如

    library(gganimate)
    library(tidyverse)
    
    stock <- bind_cols(date = round(as.numeric(time(EuStockMarkets)), 3),
                       EuStockMarkets) ## built-in dataset
    
    stock %>% ggplot(aes(date, FTSE)) +
      geom_line() +
      transition_reveal(date) +
      labs(title = "{stock$FTSE[frame_along]}")
    

    enter image description here

    NA s显示为我的时间变量,不能强制转换为整数。即使我强制它,它也不会显示任何作为第一个元素的内容 1991.496

    所以我想做一些像这样的过滤:

    stock %>% ggplot(aes(date, FTSE)) +
      geom_line() +
      transition_reveal(date) +
      labs(title = "{stock$FTSE[which(stock$date == frame_along)]}")
    

    enter image description here

    在玩了更多的游戏之后,我认为我的问题是我正在使用 which

    stock <- bind_cols(date = as.integer(time(EuStockMarkets)),
                       EuStockMarkets)
    stock <- stock %>% group_by(date) %>% summarise(ftse_sum = sum(FTSE))
    
    stock %>% ggplot(aes(date, ftse_sum)) +
      geom_line() +
      transition_reveal(date) +
      labs(title = "{stock$ftse_sum[which(stock$date == frame_along)]}")
    

    enter image description here

    工作,但这个总结数据集不是我感兴趣的。

    我想把我的时间变量转换成整数(比如乘以1000),然后把它转换成适当的比例 scale_x_continuous

    stock <- bind_cols(date = as.integer(round(as.numeric(time(EuStockMarkets)), 3)*1000),
                       EuStockMarkets)
    
    stock %>% ggplot(aes(date, FTSE)) +
      geom_line() +
      scale_x_continuous(labels = function(x) x/1000) +
      transition_reveal(date) +
      labs(title = "{stock$FTSE[which(stock$date == as.integer(frame_along))]}")
    

    enter image description here

    再次返回到闪烁的动画,尽管我现在专门针对整型向量和来自的整型值进行过滤 frame_along

    马可的建议:

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  0
  •   Marco Sandri    6 年前

    也许这就是你要找的。

    stock %>% ggplot(aes(date, FTSE)) +
      geom_line() +
      transition_reveal(date) +
      labs(title = "{stock$FTSE[which.min(abs(stock$date-frame_along))]}")
    

    enter image description here

    推荐文章