Librería

ggbump

Autor principal

David Sjoberg

Conjunto de datos de muestra

El siguiente conjunto de datos representa la clasificación (y) de algunos jugadores de tenis (grupo) a lo largo de los años (x). Estos datos serán usados en los ejemplos siguientes.

año <- rep(2019:2021, 4)
posicion <- c(4, 2, 2, 3, 1, 4, 2, 3, 1, 1, 4, 3)
jugador <- c("A", "A", "A",
             "B", "B", "B", 
             "C", "C", "C",
             "D", "D", "D")

df <- data.frame(x = año,
                 y = posicion,
                 grupo = jugador)

Bump chart básico

Para crear un bump chart en ggplot2 tendrás que cargar los paquetes ggbump y tidyverse.

# install.packages("tidyverse")
# install.packages("ggbump")
library(tidyverse)
library(ggbump)

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_bump()

Bump chart en ggplot2

Personalización del bump chart

Bump chart con puntos en ggplot2

Puedes agregar los puntos sobre las líneas con geom_point.

# install.packages("tidyverse")
# install.packages("ggbump")
library(tidyverse)
library(ggbump)

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_bump(size = 1.5) +
  geom_point(size = 6)

Los colores de las líneas y puntos se pueden cambiar con una escala de color predefinida, como scale_color_brewer, o establecer colores personalizados con scale_color_manual.

Gráfico de clasificación en ggplot2

# install.packages("tidyverse")
# install.packages("ggbump")
library(tidyverse)
library(ggbump)

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_bump(size = 1.5) +
  geom_point(size = 6) +
  scale_color_brewer(palette = "RdBu")

Se pueden realizar más personalizaciones. En el siguiente ejemplo agregamos los textos en los lados del gráfico para mostrar el cambio en la clasificación.

Personalizar un bump plot en ggplot2

# install.packages("tidyverse")
# install.packages("ggbump")
library(tidyverse)
library(ggbump)

ggplot(df, aes(x = x, y = y, color = grupo)) +
  geom_bump(size = 1.5) +
  geom_point(size = 6) +
  geom_text(data = df %>% filter(x == min(x)),
            aes(x = x - 0.1, label = grupo),
            size = 5, hjust = 1) +
  geom_text(data = df %>% filter(x == max(x)),
            aes(x = x + 0.1, label = grupo),
            size = 5, hjust = 0) +
  scale_color_brewer(palette = "RdBu") +
  theme_void() +
  theme(legend.position = "none")

También te puede interesar