Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save juanchiem/acdaf51c518295259143926d245ec588 to your computer and use it in GitHub Desktop.
Save juanchiem/acdaf51c518295259143926d245ec588 to your computer and use it in GitHub Desktop.
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