Кому annotate
(или geom_text
в моем коде) вы отправляете несколько одинаковых avg.value
значений. Когда для каждого года вам нужен только один, вы добавляете сто значений. Это приводит к сотне «средних», нанесенных друг на друга.
Решение состоит в том, чтобы отправить различные данные в geom_text
(т. Е. df2
), который содержит только 3 строки (одна запись для каждого года).
Код:
library(gganimate)
library(tidyverse)
value <- sample(0:30, 300, replace = TRUE)
year <- rep(c(2000, 2001, 2002), 100)
df1 <- as.data.frame(cbind(value, year))
df1 <- df1 %>% group_by(year) %>% mutate(avg.value = mean(value))
df2 <- df1 %>% group_by(year) %>% summarize(avg.value = head(avg.value, 1))
r1 <- ggplot(df1) +
geom_histogram(aes(value), position = "identity", color = "white") +
geom_segment(aes(x = avg.value, xend = avg.value, y = 0, yend = -0.5),
color = "red", size = 2.5) +
geom_text(aes(avg.value, -1, label = "Average"), df2) +
transition_states(as.factor(year), 2, 1) +
labs(title = "Example chart",
subtitle = "No more blur",
x = NULL,
y = NULL)
animate(r1, nframes = 100, renderer = gifski_renderer("example.gif"))