我正在寻找在不降低分辨率的情况下制作长时间序列图的动画的方法。我希望视图在整个数据上“平移”,从头到尾显示它的一个滑动子集。
假设我有以下内容:
library(ggplot2)
library(dplyr)
library(gganimate)
df <- as.data.frame(cumsum(rnorm(1:10000))) %>% rename(y = 1)
df <- mutate(df, seq = seq(1, 10000, by = 1))
ggplot(df, aes(x = seq, y = y)) +
geom_line()

我想创建一个动画,通过一次只关注数据的一部分来显示更多细节,并从头到尾滑动。想象一下,通过放大镜观察这个系列,同时将情节滑到下面……这就是我想要达到的效果。可以通过gganimate实现吗?如果没有,有什么建议吗?
发布于 2019-04-09 01:12:54
我不确定如何完全在gganimate的view_*框架中完成这项工作,但这里有一种方法,需要一些手动准备。我为我想要显示的每个帧复制数据帧,然后过滤到我希望每个帧看到的数据点。gganimate::view_follow将每个帧的视图范围设置为仅显示该帧的数据。
library(tidyverse)
library(gganimate)
df <- as.data.frame(cumsum(rnorm(1:10000))) %>% rename(y = 1)
df <- mutate(df, seq = seq(1, 10000, by = 1))
window_width = nrow(df)/5 # How much of the whole data to show at once
frames = 200 # Increase to make smoother animation & bigger file
shift_per_frame = (nrow(df) - window_width) / frames
# This bit of purrr copies the whole data frame [frames] times, identifying each with "id"
df_copied <- map_df(seq_len(frames), ~df, .id = "id") %>%
mutate(id = as.integer(id)) %>%
filter(seq >= id * shift_per_frame,
seq <= id * shift_per_frame + window_width)
a <- ggplot(df_copied, aes(x = seq, y = y)) +
geom_line() +
transition_manual(id) +
view_follow()
animate(a, nframes = frames)

使用view_follow(fixed_y = TRUE)的...or:

(请注意,对于10k的值,细分为更多的帧以获得更平滑的移动效果会更好,但这会生成比我在此处附加的文件更大的文件。)
https://stackoverflow.com/questions/55545855
复制相似问题