Bar Chart Race Animation
R Codes for Bar Chart Race Animation:
# https://medium.com/@korkmazarda1/creating-a-sliding-animated-bar-plot-with-python-and-r-2329f52f0269
# https://www.r-graph-gallery.com/288-animated-barplot-transition.html
# https://github.com/corydonbaylor/barchart-race
# https://dataatomic.com/r/ggplot2-waffle/
rm(list = ls())
library(tidyverse)
library(gganimate)
library(hrbrthemes)
read_csv("https://raw.githubusercontent.com/amrrs/animated_bar_charts_in_R/master/data/gdp_tidy.csv") -> gdp
gdp %>%
mutate(country_name = case_when(str_detect(country_name, "Russian") ~ "Russia", TRUE ~ country_name)) %>%
filter(!is.na(value)) %>%
group_by(year) %>%
arrange(-value) %>%
slice(1:20) %>%
mutate(rank = rank(-value),
Value_rel = value/value[rank == 1],
Value_lbl = paste0(" ", round(value/1e9))) %>%
ungroup() -> df_ploting
df_ploting$value %>% range() -> min_max
df_ploting %>%
ggplot(aes(rank, group = country_name, fill = country_name, color = country_name)) +
geom_tile(aes(y = value/2, height = value, width = 0.75), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1, size = 4.5) +
geom_text(aes(y = value, label = Value_lbl, hjust = 0, size = 4, fontface = "bold")) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma, limits = c(0, 1.08*min_max[2])) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme_modern_rc() +
theme(panel.grid = element_blank()) +
theme(axis.text = element_blank()) +
theme(axis.title = element_blank()) +
theme(legend.position = "none") +
theme(plot.title = element_text(size = 23)) +
theme(plot.caption = element_text(color = "white", size = 14)) +
theme(plot.subtitle = element_text(color = "white", size = 16)) +
theme(plot.margin = unit(c(1, 1, 1, 3.5), "cm")) -> plots
plots +
transition_states(year, transition_length = 4, state_length = 1) +
labs(title = "GDP in Bilions: {closest_state}",
subtitle = "Top 20 Countries",
caption = "Data Source: World Bank Data")

LS0tDQp0aXRsZTogJ0JhciBDaGFydCBSYWNlIEFuaW1hdGlvbicNCmF1dGhvcjogJ05ndXllbiBDaGkgRHVuZycNCnN1YnRpdGxlOiAiRGFpbHkgR3JhcGggU2VyaWVzIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50OiANCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgaGlnaGxpZ2h0OiB6ZW5idXJuDQogICAgIyBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRoZW1lOiAiZmxhdGx5Ig0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBmaWcud2lkdGggPSAxMCwgZmlnLmhlaWdodCA9IDgpDQpgYGANCg0KDQojIEJhciBDaGFydCBSYWNlIEFuaW1hdGlvbg0KDQpSIENvZGVzIGZvciBCYXIgQ2hhcnQgUmFjZSBBbmltYXRpb246IA0KDQpgYGB7cn0NCg0KIyBodHRwczovL21lZGl1bS5jb20vQGtvcmttYXphcmRhMS9jcmVhdGluZy1hLXNsaWRpbmctYW5pbWF0ZWQtYmFyLXBsb3Qtd2l0aC1weXRob24tYW5kLXItMjMyOWY1MmYwMjY5DQojIGh0dHBzOi8vd3d3LnItZ3JhcGgtZ2FsbGVyeS5jb20vMjg4LWFuaW1hdGVkLWJhcnBsb3QtdHJhbnNpdGlvbi5odG1sDQojIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3J5ZG9uYmF5bG9yL2JhcmNoYXJ0LXJhY2UNCiMgaHR0cHM6Ly9kYXRhYXRvbWljLmNvbS9yL2dncGxvdDItd2FmZmxlLw0KDQpybShsaXN0ID0gbHMoKSkNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCmxpYnJhcnkoaHJicnRoZW1lcykNCg0KcmVhZF9jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hbXJycy9hbmltYXRlZF9iYXJfY2hhcnRzX2luX1IvbWFzdGVyL2RhdGEvZ2RwX3RpZHkuY3N2IikgLT4gZ2RwIA0KDQpnZHAgJT4lIA0KICBtdXRhdGUoY291bnRyeV9uYW1lID0gY2FzZV93aGVuKHN0cl9kZXRlY3QoY291bnRyeV9uYW1lLCAiUnVzc2lhbiIpIH4gIlJ1c3NpYSIsIFRSVUUgfiBjb3VudHJ5X25hbWUpKSAlPiUgDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUgDQogIGdyb3VwX2J5KHllYXIpICU+JSANCiAgYXJyYW5nZSgtdmFsdWUpICU+JSANCiAgc2xpY2UoMToyMCkgJT4lDQogIG11dGF0ZShyYW5rID0gcmFuaygtdmFsdWUpLA0KICAgICAgICAgVmFsdWVfcmVsID0gdmFsdWUvdmFsdWVbcmFuayA9PSAxXSwgDQogICAgICAgICBWYWx1ZV9sYmwgPSBwYXN0ZTAoIiAiLCByb3VuZCh2YWx1ZS8xZTkpKSkgJT4lIA0KICB1bmdyb3VwKCkgLT4gZGZfcGxvdGluZw0KDQpkZl9wbG90aW5nJHZhbHVlICU+JSByYW5nZSgpIC0+IG1pbl9tYXgNCg0KZGZfcGxvdGluZyAlPiUgDQogIGdncGxvdChhZXMocmFuaywgZ3JvdXAgPSBjb3VudHJ5X25hbWUsIGZpbGwgPSBjb3VudHJ5X25hbWUsIGNvbG9yID0gY291bnRyeV9uYW1lKSkgKw0KICBnZW9tX3RpbGUoYWVzKHkgPSB2YWx1ZS8yLCBoZWlnaHQgPSB2YWx1ZSwgd2lkdGggPSAwLjc1KSwgYWxwaGEgPSAwLjgsIGNvbG9yID0gTkEpICsNCiAgZ2VvbV90ZXh0KGFlcyh5ID0gMCwgbGFiZWwgPSBwYXN0ZShjb3VudHJ5X25hbWUsICIgIikpLCB2anVzdCA9IDAuMiwgaGp1c3QgPSAxLCBzaXplID0gNC41KSArDQogIGdlb21fdGV4dChhZXMoeSA9IHZhbHVlLCBsYWJlbCA9IFZhbHVlX2xibCwgaGp1c3QgPSAwLCBzaXplID0gNCwgZm9udGZhY2UgPSAiYm9sZCIpKSArDQogIGNvb3JkX2ZsaXAoY2xpcCA9ICJvZmYiLCBleHBhbmQgPSBGQUxTRSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpjb21tYSwgbGltaXRzID0gYygwLCAxLjA4Km1pbl9tYXhbMl0pKSArDQogIHNjYWxlX3hfcmV2ZXJzZSgpICsNCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UsIGZpbGwgPSBGQUxTRSkgKw0KICB0aGVtZV9tb2Rlcm5fcmMoKSArIA0KICB0aGVtZShwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSArIA0KICB0aGVtZShheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCkpICsgDQogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMjMpKSArIA0KICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoY29sb3IgPSAid2hpdGUiLCBzaXplID0gMTQpKSArIA0KICB0aGVtZShwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGNvbG9yID0gIndoaXRlIiwgc2l6ZSA9IDE2KSkgKyANCiAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMSwgMSwgMSwgMy41KSwgImNtIikpIC0+IHBsb3RzDQoNCnBsb3RzICsgDQogIHRyYW5zaXRpb25fc3RhdGVzKHllYXIsIHRyYW5zaXRpb25fbGVuZ3RoID0gNCwgc3RhdGVfbGVuZ3RoID0gMSkgKyANCiAgbGFicyh0aXRsZSA9ICJHRFAgaW4gQmlsaW9uczoge2Nsb3Nlc3Rfc3RhdGV9IiwgDQogICAgICAgc3VidGl0bGUgID0gICJUb3AgMjAgQ291bnRyaWVzIiwNCiAgICAgICBjYXB0aW9uICA9ICJEYXRhIFNvdXJjZTogV29ybGQgQmFuayBEYXRhIikNCg0KDQpgYGANCg0K