Created
April 17, 2019 18:45
-
-
Save gonzalezgouveia/9072a9269676cbb70062b0a11f122080 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) | |
library(gganimate) | |
# devtools::install_github('bbc/bbplot') | |
library(bbplot) | |
library(ggthemes) | |
# Hecho por Rafa @GonzalezGouveia | |
# Con gusto para #DatosDeMiercoles, propuesto por @R4DS_es | |
cambio_lealtades <- readr::read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-04-17/cambio_lealtades.csv") | |
# tiempo_pantalla <- readr::read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-04-17/tiempo_pantalla.csv") | |
# personajes_libros <- readr::read_csv("https://raw.githubusercontent.com/cienciadedatos/datos-de-miercoles/master/datos/2019/2019-04-17/personajes_libro.csv") | |
protagonistas <- c('Tyrion Lannister', | |
'Cersei Lannister', | |
'Daenerys Targaryen', | |
'Jon Nieve', | |
'Sansa Stark', | |
'Arya Stark', | |
'Jaime Lannister') | |
# preparando la tabla para el análisis | |
lealtad_tidy <- cambio_lealtades %>% | |
filter(nombre %in% protagonistas) %>% | |
gather(key = "temporada", | |
value = "lealtad_nombre", | |
3:10) %>% | |
mutate( | |
# Esto es lo que más me llevó tiempo | |
lealtad_casa = case_when( | |
lealtad_nombre =='Rey Robert Baratheon' ~ 'Baratheon', | |
lealtad_nombre =='Viserys Targaryen' ~ 'Targaryen', | |
lealtad_nombre =='Rey Joffrey Baratheon' ~ 'Lannister', | |
lealtad_nombre =='Daenerys Targaryen' ~ 'Targaryen', | |
lealtad_nombre =='Guardia de la Noche' ~ 'Guardia de la Noche', | |
lealtad_nombre =='Otra, Westeros' ~ 'Westeros', | |
lealtad_nombre =='Salvajes' ~ 'Salvajes', | |
lealtad_nombre =='Rey Tommen Baratheon' ~ 'Lannister', | |
lealtad_nombre =='Petyr Baelish, Lord Protector del Valle' ~ 'El Valle', | |
lealtad_nombre =='Otra, Essos' ~ 'Essos', | |
lealtad_nombre =='Muerta/o' ~ 'Muerta/o', | |
lealtad_nombre =='Roose Bolton, Lord Guardián del Norte' ~ 'Bolton', | |
lealtad_nombre =='Reina Cersei Lannister' ~ 'Lannister', | |
lealtad_nombre =='Jon Nieve, Rey del Norte' ~ 'Stark' | |
), | |
# Que pereza xD | |
temporada_nombre = case_when( | |
temporada == 'lealtad_inicial' ~ 'comienzo de Temporada 1', | |
temporada == 'fin_t1' ~ 'final de Temporada 1', | |
temporada == 'fin_t2' ~ 'final de Temporada 2', | |
temporada == 'fin_t3' ~ 'final de Temporada 3', | |
temporada == 'fin_t4' ~ 'final de Temporada 4', | |
temporada == 'fin_t5' ~ 'final de Temporada 5', | |
temporada == 'fin_t6' ~ 'final de Temporada 6', | |
temporada == 'fin_t7' ~ 'final de Temporada 7' | |
) | |
) | |
# Esto es para la grafica | |
# convirtiendo character en factor y numeric | |
# necesario para que transition_states sea dinamico | |
lealtad_tidy$leatad_factor <- factor(lealtad_tidy$lealtad_casa) | |
lealtad_tidy$leatad_numero <- as.numeric(factor(lealtad_tidy$lealtad_casa)) | |
# breaks y labels para eje x | |
breaks_plot_x <- unique(lealtad_tidy$leatad_numero) | |
labels_plot_x <- unique(lealtad_tidy$leatad_factor) | |
# Esto es para poner nombres del lado izquierdo y derecho | |
lealtad_tidy$nombre_factor <- factor(lealtad_tidy$nombre) | |
lealtad_tidy$nombre_numero <- as.numeric(factor(lealtad_tidy$nombre)) | |
# breaks y labels para eje y | |
breaks_plot_y <- unique(lealtad_tidy$nombre_numero) | |
labels_plot_y <- unique(lealtad_tidy$nombre_factor) | |
# construyendo la grafica! | |
p <- lealtad_tidy %>% | |
ggplot(aes(x = leatad_numero, y = nombre_numero, color = nombre)) + | |
# puntos | |
geom_point(size = rel(10)) + | |
# Ajuste de nombres en la escala, duplicado en eje y | |
scale_x_continuous(breaks = breaks_plot_x, | |
labels = labels_plot_x) + | |
scale_y_continuous(sec.axis = dup_axis(), | |
breaks = breaks_plot_y, | |
labels = labels_plot_y | |
) + | |
# escala de colores ajustada para daltonismo | |
scale_color_colorblind() + | |
# estilo bbc | |
bbc_style() + | |
# titulos | |
labs(title = 'Lealtad al {closest_state}', | |
subtitle = '#DatosDeMiercoles :D') + | |
# ajuste de temas | |
theme(axis.text.x = element_text(angle = 90, | |
hjust = 1), | |
axis.title.y = element_blank(), | |
legend.position = "none" | |
) | |
# construyendo la animación | |
anim <- p + | |
transition_states(temporada_nombre, | |
wrap = FALSE) | |
# animando | |
animate(anim, | |
nframes = 240, | |
fps = 24, | |
width = 1000, | |
height = 500, | |
start_pause = 24, # cambiar a 12 | |
end_pause = 48) # cambiar a 48 | |
# guardando y vamonos a twitter | |
anim_save('game_of_dataviz.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