Скажите, что у меня есть эти данные, которые я хочу анимировать с помощью ggplot2
+ gganimate
.
library(ggplot2)
library(gganimate)
data <- data.frame(day = c(1:5, 1:5),
x = c(rep(2,5), rep(4, 5)),
y=c(rep(1, 5), rep(2, 5)))
data <- data[c(1:2, 4:10),]
Цели анимации / вопроса:
Нет. 1. иметь мигающие красные точки для каждого дня + x + y точка, которая находится в наборе данных (это означает, что есть наблюдение за этим днем + x + y). Вспышка должна быть очень короткой. После того, как он начнет мигать, он должен перейти к цвету фона (контролируемому shadow_mark) черного цвета. Обратите внимание, что я не хочу, чтобы точки плавали вокруг, оставались только там, где они есть (см. Решение этого вопроса: Как сделать так, чтобы точки в gganimate появлялись, а не переходили ).
Нет. 2. Я также хочу, чтобы точки начинали мигать именно тогда, когда начинается их день. Вот код, который выполняет только часть того, что я хочу, но не может (полностью) адресовать номера 1 и 2:
ggplot(data, aes(x,y, group=interaction(x,y))) +
geom_point(color="red", size=3) +
transition_time(day) +
shadow_mark(color="black", size=3) +
theme(plot.subtitle = element_text(hjust = 0.7)) +
labs(subtitle = paste('day: {frame_time}')) -> a
anim_save("test.gif", a, end_pause=6, width = 400, height = 450, duration=15)
Вот результирующая анимация:
Здесь есть две проблемы, которые я надеюсь решить:
- Точки не только мгновенно мигают, но и слишком долго мигают. Другими словами, я хотел бы кратко увидеть красную точку, затем черную точку, затем красную точку и т. Д.
- Существует также проблема с началом вспышки. Это иллюстрируется, когда точка становится черной (потому что
data
отсутствует 3-й день для (x = 2, y = 1) точки), как и ожидалось. Однако в течение 3-го дня он частично становится черным, а в течение 4-го дня снова превращается в красный, но я бы хотел, чтобы он стал черным точно в день, когда начинается 3-й день, и мигал красным точно в день, когда начинается 4-й день. Обратите внимание, что я не уверен, вызвано ли это смещение времени поведением transition_time
или поведением субтитров frame_time
или чем-то еще.
Есть предложения?