Анимация двух слоев в gganimate с разными временными шагами
Я использую gganimate для наложения данных об отслеживании животных поверх доступности добычи, причем оба изображения анимированы во времени, чтобы показать, как изменяются движения животных при изменении доступности добычи. Набор данных отслеживания состоит из почасовой широты и долготы за период в несколько месяцев. Набор данных добычи состоит из значений энергии для каждой широты и долготы с недельными интервалами
Пример датафреймов
head(Tracks)
sumDur lon2 lat gmt
30641 0.0000000 -170.2978 57.10774 2004-08-18 05:05:00
29380 0.0000000 -170.3264 57.05684 2004-08-18 06:00:00
29381 10.0833333 -170.3565 57.00376 2004-08-18 07:00:00
29382 3.0833333 -170.3859 56.95370 2004-08-18 08:00:00
29383 0.8333333 -170.4147 56.90687 2004-08-18 09:00:00
29384 2.6666667 -170.4429 56.86301 2004-08-18 10:00:00
head(Prey)
# A tibble: 6 x 4
TotalEnergyM2 lat lon2 gmt
<dbl> <dbl> <dbl> <dttm>
1 0 50 160 2004-01-01 00:00:00
2 0 50 162. 2004-01-01 00:00:00
3 0.0000193 50 180. 2004-01-01 00:00:00
4 0 50.3 -151. 2004-01-01 00:00:00
5 38.3 53.9 -158 2004-01-01 00:00:00
6 31.4 53.9 -158. 2004-01-01 00:00:00
Используя варианты приведенного ниже кода, я смог успешно анимировать данные отслеживания поверх статической среды, а также анимировать данные добычи без данных отслеживания. Моя проблема заключается в попытке создать одну из двух анимаций - я получаю анимацию, но время каждой анимации неверно, хотя я знаю, что время перекрывается. Я полагаю, что это вызвано тем фактом, что длина кадра моего временного столбца (gmt) не одинакова в каждом кадре данных; в моем фрейме данных отслеживания временной шаг равен одному часу, а в фрейме данных добычи временной шаг равен одной неделе. К сожалению, я не могу проверить это, потому что дата-фрейм добычи слишком велик, чтобы реплицировать его с часовым шагом. Я поиграл с некоторыми из различных переходов (например, transition_state), но не увенчался успехом и не смог найти каких-либо решений здесь или в другом месте. Любая помощь будет принята с благодарностью и заранее извинится, если я не предоставил достаточно информации или форматирование отключено - это мой первый пост.
Пример кода
plot<-ggplot(NULL)+geom_raster(data=Prey, aes(x=lon2, y=lat2,
fill=TotalEnergyM2)+geom_point(data=Tracks, aes(x=lon2, y=lat2,
size=sumDur))+scale_fill_viridis_c()+
transition_time(gmt)+
ease_aes("linear")+ labs(title="{frame_time}", x="Longitude", y="Latitude")
animate(plot)
Приведенный выше код прекрасно работает, если я закомментирую geom_raster или geom_point, чтобы получить отдельные анимации, или если geom_raster является статическим. Я прикрепил ссылку на два файла данных с поддельными данными, которые работают с приведенным выше кодом и воспроизводят проблемы, которые возникают у меня с файлами данных.
0 ответов
На моей машине ваш код работает без проблем. Если твой datetime
правильно отформатирован как дата transition_time()
заполнит все промежутки между вашими точками данных:
plot <- ggplot() +
geom_raster(data = Prey, aes(x = lon, y = lat, fill = energy)) +
scale_fill_viridis_c() +
geom_point(data = Tracks, aes(x = lon, y = lat, size = sumdur)) +
transition_time(datetime) +
ease_aes("linear") +
labs(title="{frame_time}", x="Longitude", y="Latitude")
animate(plot, nframes = 100)
https://st ackru.com/images/d948ffb056136ca6388ce334327d6ef894e3ab09.gif