Forked from gonzalezgouveia/datosdemiercoles_gapminder.R
Created
April 25, 2019 19:51
-
-
Save juanchiem/acdaf51c518295259143926d245ec588 to your computer and use it in GitHub Desktop.
This file contains 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