Visualizando... la Liga (o cómo añadir imágenes a un ggplot)
Ahora que ha terminado la Liga, es buen momento para echar la vista atrás y visualizar algunas de las estadísticas que nos deja. En concreto, vamos a analizar la relación “Goles a favor” - “Puntos conseguidos”.
Las estadísticas están sacadas de
la web de La Liga, y los gráficos se harán usando R
.
En una primera representación con ggplot
, las etiquetas no se verían correctamente:
ggplot(data = estadisticas, aes(GF, Pt, label = equipo)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
geom_text() +
xlab("Goles a favor") +
ylab("Puntos") +
theme_classic()
El gráfico mejora notablemente usando el paquete ggrepel
para que las etiquetas se repelan:
ggplot(data = estadisticas, aes(GF, Pt, label = equipo)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
geom_text_repel() +
xlab("Goles a favor") +
ylab("Puntos") +
theme_classic()
Por último, vamos a hacer el mismo gráfico usando los escudos de los equipos.
Para añadir una imagen a un gráfico, usaremos los paquetes ggplot2
, png
, dplyr
, y grid
.
Leemos el escudo:
escudo1 <- readPNG("escudos/barcelona.png")
Representamos el gráfico:
ggplot(estadisticas, aes(GF, Pt, label = equipo)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
xlab("Goles a favor") +
ylab("Puntos") +
theme_classic() +
annotation_custom(rasterGrob(escudo1),
xmin = estadisticas$GF[1] - 4,
xmax = estadisticas$GF[1] + 4,
ymin = estadisticas$Pt[1] - 4,
ymax = estadisticas$Pt[1] + 4)
Y para hacerlo con todos los escudos, usaremos un bucle y una función propia:
# Leemos los escudos
for(i in 1:20){
assign(paste0("escudo", i), readPNG(paste0("Escudos/", estadisticas$equipo[i], ".png")))
}
# Función propia
etiqueta_escudo <- function(n_equipo, puntox, puntoy, altura = 4) {
nombre <- paste0("escudo", n_equipo) %>% as.name %>% eval
return(annotation_custom(rasterGrob(nombre, interpolate = FALSE),
xmin = puntox[i] - altura,
xmax = puntox[i] + altura,
ymin = puntoy[i] - altura,
ymax = puntoy[i] + altura))
}
Después, partimos de un gráfico base:
grafico <- ggplot(estadisticas, aes(GF, Pt, label = equipo)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
xlab("Goles a favor") +
ylab("Puntos") +
theme_classic()
y añadimos un bucle para añadir todos los escudos:
for (i in 20:1) {
grafico <- grafico + etiqueta_escudo(i, estadisticas$GF, estadisticas$Pt)
}
(El ciclo for va de 20 a 1 para que, en caso de superposición, los equipos con más puntos se muestren “encima” de los equipos con menos puntos)
Obtenemos así el siguiente gráfico:
- Posted on:
- May 24, 2018
- Length:
- 2 minute read, 374 words