Reordenando gráficos de barras en R con GGanimate
¡Gráficos interactivos en R con GGanimate! En este post te enseñamos barras que evolucionan con el tiempo y además que se reordenan. ¡Entra y descúbrelo!
GGanimate es una libraría de R que está generando bastantes casos de uso, comentarios y posts debido al potencial que introduce en el aspecto de visualizaciones en el ecosistema R.
Nos encontramos usuarios preguntando la posibilidad de que las barras no solo aumenten y disminuyan a lo largo del tiempo(de la animación) sino que también el orden de las mismas se modificara en función de si eran mayores o menores y no permaneciesen en el orden del primer timestamp, en definitiva que se reordenaran.
Por tanto, compartimos el siguiente código en el cual se consigue que las barras se reordenan a lo largo del tiempo. Es más, en este ejemplo, tenemos 5 ciudades que entran y salen del gráfico en función de su valor durante el tiempo y visualizando el top 4.
Os dejamos el código para realizar la animación del gráfico de barras:
library(ggplot2)
library(gganimate)
library(tidyverse)
df_evolution_data <- data.frame(Name=rep(c("Madrid","Barcelona", # Creamos el dataset
"Valencia","Alicante",
"Sevilla"),5),
Year = factor(sort(rep(2001:2005, 5))),
Value = runif(25,100,1000))
df_evolution_data_filtered <- df_evolution_data %>%
group_by(Year) %>%
mutate(Rank = rank(Value)) %>% # Añadimos la columna rank y
filter(Rank >= 2) # descartamos el de menor valor
ggplot(df_evolution_data_filtered) +
geom_col(aes(x=Rank, # Creamos el gráfico de barras
y=Value,
group=Name, # Afrumando y filleando por ciudad
fill=Name),
width=0.4) +
geom_text(aes(x=Rank, # Etiquetamos las barras con los nombres
y=0,
label=Name,
group=Name),
hjust=1.25) +
theme_minimal() + # Elegimos un theme que no sea gris
ylab('Value') +
theme(axis.title.y = element_blank(), # Eliminamos los labels y titles
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
plot.margin = unit(c(5,5,5,5), 'lines')) + # Escogemos el zoom
scale_fill_brewer(palette="Dark2") + # Paleta de colores de las barras
coord_flip(clip='off') + # Hacemos las barras horizontales
ggtitle('{closest_state}') + # Tilulo == al valor de la columna que
transition_states(Year, # Animamos la columna Year
transition_length = 1, # Duración de la animación de transición
state_length = 1) + # Duración de cada Year
exit_fly(x_loc = 0, y_loc = 0) + # Salida de la ciudad no top4
enter_fly(x_loc = 0, y_loc = 0) # Entrada de la ciudad al top4