除了在时间补间变量之外,我还想在每个帧的标题标签信息中使用替代变量。
软件包Maintenanceer提到通常是不可能的,但是提供了一个小的解决方法示例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]}")
您只能看到NA
,因为我的时间变量不能被强制转换为整数。即使我要强制执行此操作,也不会显示任何内容,因为我的时间向量中的第一个元素1991.496
大于数据框中的行总数(1860)。
所以我考虑做这样的事情作为过滤器:
stock %>% ggplot(aes(date, FTSE)) +
geom_line() +
transition_reveal(date) +
labs(title = "{stock$FTSE[which(stock$date == frame_along)]}")
我得到的是一堆闪烁的帧,但是从可见的帧中,我可以看到过滤器确实可以使正确的变量显示在标题中。我不确定这是什么问题,但我很想解决这个问题。
编辑:
经过更多的研究之后,我认为我的问题是我正在使用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)]}")
有效,但是这个汇总的数据集不是我感兴趣的。
我考虑过将时间变量转换为整数(例如乘以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))]}")
尽管我现在专门针对frame_along
中的整数矢量和整数值进行过滤,但还是再次返回了闪烁的动画。
马可的建议: