Поскольку я получил свой собственный ответ, я публикую его здесь, на всякий случай, если он может помочь кому-то еще.
1) Рейтинг: идея состоит в том, чтобы вычислить «среднее число мест» по стране и году, и затем вычислять порядок страны по avg_revenu каждый год.
2) График: хитрость заключается в том, чтобы не использовать реальный столбик, а использовать geom_tile.
#example constitution
d <- tibble(
country = as.factor(sample(
c("France", "Germany", "UK"), 100, replace = TRUE
)),
year = sample(c(2000, 2002, 2004, 2006), 100, replace = TRUE),
revenu = rnorm(100, mean = 1500, sd = 400)
)
#ranking
d2 <- d %>% group_by(country, year) %>% summarise(avg_revenu = mean(revenu, na.rm = TRUE)) %>% arrange(year, avg_revenu) %>% group_by(year) %>% mutate(order = min_rank(avg_revenu) * 1.0) %>% ungroup()
#animation object
anim <- d2 %>%
ggplot(aes(order, group = country)) +
geom_tile(aes(
y = avg_revenu / 2,
height = avg_revenu,
width = 0.9
), fill = "grey50") +
theme(axis.text.y = element_blank(), axis.title.y = element_blank()) +
scale_y_continuous(name = "Average revenu", breaks = c(0,500,1000,1500), limits = c(-500,NA)) +
transition_states(year, transition_length = 1, state_length = 3) +
geom_text(aes(y = 0, label = country), hjust = "right") +
coord_flip(clip = "off") +
ggtitle("{closest_state}")
#animation
animate(anim, nframes = 100)