Skip to content

Instantly share code, notes, and snippets.

@gonzalezgouveia
Created April 17, 2019 18:45
Show Gist options
  • Save gonzalezgouveia/9072a9269676cbb70062b0a11f122080 to your computer and use it in GitHub Desktop.
Save gonzalezgouveia/9072a9269676cbb70062b0a11f122080 to your computer and use it in GitHub Desktop.
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