Я думаю, что нашел ответ, после того, как опубликовал этот вопрос на github . Как вы указали в своем вопросе, это, по-видимому, известная проблема, связанная с мерцанием оси при использовании coord_flip()
с анимацией.
Я пробовал geom_rect
вместо geom_tile
, но это все равно заставляет вас мерцать. .
Что работает, так это geom_colh
вместо geom_tile
! Это из пакета ggstance
. Вот код:
ggplot(gap, aes(y=rank, group = country,
fill = as.factor(country), color = as.factor(country))) +
geom_colh(aes(x=gdpPercap/2), width=0.9, alpha = 0.8, color = NA) +
geom_text(aes(x = 0, label = paste(country, " ")), vjust = 0.2, hjust = 1) +
scale_y_reverse(labels = scales::comma) +
guides(color = FALSE, fill = FALSE) +
coord_cartesian(clip='off') +
labs(title='{closest_state}', x = "GFP per capita", y = "") +
theme(
plot.title = element_text(hjust = 0, size = 22),
axis.ticks.y = element_blank(),
axis.text.y = element_blank(),
plot.margin = margin(1,1,1,4, "cm"),
axis.line.y = element_blank()) +
transition_states(year, transition_length = 4, state_length = 1) +
ease_aes('cubic-in-out') +
view_follow()
Таким образом, чтобы go было изменено:
geom_colh
используется вместо geom_tile
. Вам нужен пакет ggstance
для этого - я даже не пробовал geom_col
, но я думаю, вы будете мигать с этим.
scale_y_reverse
этот вызов содержит ваш вызов меток вместо scale_y_continuous
, так как вы тоже хотите повернуть ось. Вероятно, было бы лучше, если бы вы указали y aestheti c в качестве страны, а затем переупорядочили ее на ранг .... но да, это работает так, как есть.
coord_cartesian(clip='off')
This служит той же цели, что и настройки вашего coord_flip
. Если вы хотите переполнить названия стран, вам это нужно для того, чтобы текст выводился на go «вне» области графика. Опять же - было бы лучше, если бы вы использовали y=country
, но снова ... эх, это работает.
axis.line.y = element_blank()
удалено для удобства просмотра - или вы можете оставить его и играть с поля вашего графика располагаются между осью и началом столбцов. Опять же - да, это работает.
Могут быть и другие способы, но это, кажется, разумный обходной путь. Хорошая графика c!