如何控制 gganimate 中闪烁点的出现
How to control appearance of flashing dots in gganimate
说我有这些数据,我想用 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),]
animation/question 的目标是
没有。 1. 数据集中的每一天+x+y点都有闪烁的红点(意味着那天+x+y有一个观察值)。闪光灯应该非常简短。闪烁后,应转到黑色的背景颜色(由 shadow_mark 控制)。请注意,我不希望圆点四处漂浮,只希望它们留在原处(请参阅此问题的解决方案:)。
没有。 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
缺少 (x=2,y=1) 点的第 3 天),就说明了这一点。然而,它在第 3 天的中途变成黑色,并在第 4 天的中途变回红色,但我希望它在第 3 天开始时恰好变成黑色,并在第 4 天开始时恰好闪烁红色。请注意,我不确定这次错位是由 transition_time
行为还是字幕 frame_time
行为或其他原因引起的。
有什么建议吗?
这是一种方法,其中数据被准备为每天提供 25 帧,其中颜色仅在第一帧中闪烁:
library(dplyr); library(tidyr)
f_per_day <- 25
animate(
data %>%
uncount(f_per_day, .id = "frame") %>%
mutate(time = day + (frame-1)/f_per_day) %>%
ggplot(aes(x, y, color = frame == 1)) +
geom_point(size = 3) +
scale_color_manual(values = c("black", "red"), guide = F) +
theme(plot.subtitle = element_text(hjust = 0.7)) +
labs(subtitle = paste('day: {floor(frame_time*10)/10}')) +
transition_time(time),
width = 400,
height = 450,
fps = 25,
type = "cairo")
说我有这些数据,我想用 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),]
animation/question 的目标是
没有。 1. 数据集中的每一天+x+y点都有闪烁的红点(意味着那天+x+y有一个观察值)。闪光灯应该非常简短。闪烁后,应转到黑色的背景颜色(由 shadow_mark 控制)。请注意,我不希望圆点四处漂浮,只希望它们留在原处(请参阅此问题的解决方案:
没有。 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
缺少 (x=2,y=1) 点的第 3 天),就说明了这一点。然而,它在第 3 天的中途变成黑色,并在第 4 天的中途变回红色,但我希望它在第 3 天开始时恰好变成黑色,并在第 4 天开始时恰好闪烁红色。请注意,我不确定这次错位是由transition_time
行为还是字幕frame_time
行为或其他原因引起的。
有什么建议吗?
这是一种方法,其中数据被准备为每天提供 25 帧,其中颜色仅在第一帧中闪烁:
library(dplyr); library(tidyr)
f_per_day <- 25
animate(
data %>%
uncount(f_per_day, .id = "frame") %>%
mutate(time = day + (frame-1)/f_per_day) %>%
ggplot(aes(x, y, color = frame == 1)) +
geom_point(size = 3) +
scale_color_manual(values = c("black", "red"), guide = F) +
theme(plot.subtitle = element_text(hjust = 0.7)) +
labs(subtitle = paste('day: {floor(frame_time*10)/10}')) +
transition_time(time),
width = 400,
height = 450,
fps = 25,
type = "cairo")