При создании графика с использованием transition_layer в gganimate я заметил, что добавлен дополнительный слой NA.
Как минимальный пример. Скажем, у меня есть 10 уникальных наблюдений (помеченных "obs") пар x, y для каждой из 5 групп (помеченных "id").
library(tidyverse)
library(gganimate)
dat1 <- data.frame(expand.grid(id = seq(1,5,1),obs=seq(1,10,1))) %>%
mutate(x = runif(50,10,30),
y = runif(50,100,300))
Я хочу создать объект gganimate, который переходит по каждой из 5 групп. По сути, это было бы равнозначно созданию уникального графика рассеяния x, y для каждой группы, а затем объединению этих 5 графиков в GIF. Я могу сделать это с помощью функции transition_layer в gganimate следующим образом:
p <- dat1 %>%
ggplot(aes(x,y))+
geom_point(data=filter(dat1,id==1))+
geom_point(data=filter(dat1,id==2))+
geom_point(data=filter(dat1,id==3))+
geom_point(data=filter(dat1,id==4))+
geom_point(data=filter(dat1,id==5))
layername <- c("one","two","three","four","five")
anim <- p + transition_layers(
layer_length = 5,
transition_length = 1,
keep_layers = FALSE,
from_blank = FALSE,
layer_order = NULL,
layer_names = layername
)+
ggtitle('Layers',
subtitle = '{closest_layer} of 5')
anim
Анимация работает, как и ожидалось, переходя через каждый из слоев, как видно из заголовка (например, «один из 5», «два из 5 ", ...," пять из 5 "). Однако в конце анимации я получаю разрыв в последовательности. Слои go ... "пять из 5", "один из 5", "NA из 5", "один из 5".
Я не уверен, почему дополнительные переходы в анимации происходят Тем более что в слоях нет NA. Любая идея, почему это может происходить и как это можно исправить? Или, может быть, лучший способ создать аналогичный результат?
Редактировать: объект слоя не содержит слой для NA
anim$layers
[[1]]
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
[[2]]
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
[[3]]
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
[[4]]
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity
[[5]]
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity