Last active
March 22, 2023 19:54
-
-
Save gonzalezgouveia/b6b731b4fa05ceb86f036f5ef1ed5b77 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(tidyverse) | |
# devtools::install_github('rensa/ggflags') | |
library(ggflags) # https://github.com/rensa/ggflags | |
library(ggrepel) | |
library(ggthemes) | |
library(gganimate) | |
# Hecho por Rafa @GonzalezGouveia | |
# Con gusto para #DatosDeMiercoles, propuesto por @R4DS_es | |
# leer los datos | |
gapminder <- read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-04-24/gapminder_es.csv") | |
# Esta es la parte "no tan" aburrida... | |
# creando etiqueta para asignar banderas | |
# ver https://github.com/rensa/ggflags | |
countries <- list(Argentina = 'ar', | |
Brazil = 'br', | |
Chile = 'cl', | |
Colombia = 'co', | |
Ecuador = 'ec', | |
Mexico = 'mx', | |
Nicaragua = 'ni', | |
Peru = 'pe', | |
Uruguay = 'uy', | |
Venezuela = 've') | |
# funcion auxiliar para asignar etiquetas de paises | |
assign_code <- function(country_name){ | |
# casos de otros nombres | |
if (country_name == 'Venezuela (Republica Bolivariana de)') { | |
country_name <- 'Venezuela' | |
} else if (country_name == 'Brasil') { | |
country_name <- 'Brazil' | |
} | |
# para todos los demas | |
country_code <- countries[[country_name]] | |
return(country_code) | |
} | |
# colores oficiales de las banderas | |
# puedes buscar el color por país en https://www.schemecolor.com/ | |
country_flag_colors <- c('ar' = '#75AADB', | |
'br' = '#009B3A', | |
'cl' = '#D52B1E', | |
'co' = '#FCD116', | |
'ec' = '#034EA2', | |
'mx' = '#006847', | |
'ni' = '#0067C6', | |
'pe' = '#D91023', | |
'uy' = '#0038A8', | |
've' = '#8A082A') | |
# preparando datos para la grafica | |
gapminder_tidy <- gapminder %>% | |
filter(pais %in% c('Argentina', | |
'Brasil', | |
'Chile', | |
'Colombia', | |
'Ecuador', | |
'Mexico', | |
'Nicaragua', | |
'Peru', | |
'Uruguay', | |
'Venezuela (Republica Bolivariana de)')) %>% | |
mutate(code = mapply(assign_code, as.character(pais)), | |
anio = as.integer(anio)) | |
# Ahora sí, a hacer la gráfica :) | |
# preparando gráfico base | |
p0 <- gapminder_tidy %>% | |
ggplot(aes(x = esperanza_de_vida, y = code, country = code, color = code)) + | |
# agregando año que va en el fondo | |
geom_text(aes(label = as.character(anio)), | |
x = 65, | |
y = 5.5, | |
color = '#ededed', | |
size = 50) + | |
# este es el texto en la base de la grafica | |
geom_label_repel(aes(x = esperanza_de_vida, y = code, label = code), | |
direction = "y", | |
vjust = -1, | |
nudge_x = - 100, | |
label.padding = 0.5, | |
size = 5, | |
label.size = 0.75, | |
segment.size = 1) + | |
# colocar borde a banderas | |
geom_point(size = rel(17)) + | |
# banderas como puntos, requiere paquete ggflag ver arriba | |
geom_flag(size = rel(15)) + | |
coord_flip() + | |
NULL | |
# agregando capas de temas | |
p_last <- p0 + | |
labs(title = 'Esperanza de vida en {frame_along}', | |
subtitle = 'Para países de Latinoamérica', | |
x = 'promedio de vida en años' | |
) + | |
# definiendo tema base y escala de colores | |
theme_gdocs() + | |
scale_fill_manual(values = country_flag_colors) + | |
scale_color_manual(values = country_flag_colors) + | |
# otros ajuste del tema | |
theme(legend.position = "none", | |
plot.title = element_text(size = rel(2.5)), | |
plot.subtitle = element_text(size = rel(1.5)), | |
axis.text = element_text(size = rel(2)), | |
axis.title = element_text(size = rel(2)), | |
axis.text.x = element_blank(), | |
axis.title.x = element_blank(), | |
axis.line = element_blank() | |
) | |
# creando objeto de animacion | |
anim <- p_last + transition_reveal(anio) | |
# animando | |
animate(anim, | |
nframes = 240, | |
fps = 24, | |
detail = 10, | |
width = 550, | |
height = 550, | |
start_pause = 12, | |
end_pause = 48) | |
# guardando animacion como gif | |
anim_save('datos_miercoles_gapminder.gif') | |
# Hecho por Rafa @GonzalezGouveia | |
# Con gusto para #DatosDeMiercoles, propuesto por @R4DS_es |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment