Streamgraph en ggplot2

Librería

ggstream

Autor principal

David Sjoberg

Datos de muestra

Considera el conjunto de datos blockbusters del paquete ggstream para esta guía.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)

blockbusters

Stream plots en ggplot2 con geom_stream

La función geom_stream del paquete ggstrean permite crear streamplots en ggplot2. Pasa tu dataframe y usa la función para crear un strem graph básico.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream()

Stream graph en ggplot2

Etiquetando las áreas

Ten en cuenta que la librería contiene una función adicional llamada geom_stream_label que puede ser usada para agregar etiquetas a cada área del streamgraph.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream() +
  geom_stream_label(aes(label = genre))

Streamgraph con etiquetas en R

Tipos de stream graphs

Por defecto, la función geom_stream usa el tipo "mirror", que apila las áreas de manera simétrica respecto al eje X. Otras alternativas son "ridge", que apila desde el eje X y "proportional", que hace que las áreas sumen 1.

Stream graph tipo ridge en ggplot2

Ridge

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(type = "ridge")

Streamplot tipo proporcional en R

Proportional

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(type = "proportional")

Personalización de los colores

Cambiar los colores de fondo

Es posible cambiar los colores de fondo del streamgraph con scale_fill_manual o una función equivalente.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream() +
  scale_fill_manual(values = cols)

La función geom_stream del paquete ggstream

Cambiar el color de los bordes

Por defecto las áreas no tienen bordes pero puedes agregarlos pasando un color al argumento color de la función geom_stream y modificar su grosor con lwd.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25) +
  scale_fill_manual(values = cols)

Streamplot color del borde

Cambiar el tema

Ten en cuenta que también puedes cambiar el tema para modificar la apariencia del gráfico.

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25) +
  scale_fill_manual(values = cols) +
  theme_minimal()

Streamgraph en ggplot2 con ggstream

Argumentos avanzados

Para crear un streamplot es necesario realizar estimaciones no paramétricas que necesitan de una ventana (por defecto de 0.75) y una rejilla de valores en el eje X (por defecto es 1000). Puedes cambiar estos valores por defecto con bw y n_grid.

Ten en cuenta que también puedes usar un rango adicional en la estimación con extra_span, que por defecto es 0.01 (1%) y especificar con true_range si el rango verdadero de los datos se debería usar en la visualización o si por el contratrio se debería usar el rango de estimación.

Personalización del bandwidth del stream graph

Ventana (bw)

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25,
              bw = 1) +
  scale_fill_manual(values = cols) +
  theme_minimal()

Rejilla de valores del eje X en geom_stream con n_grid

Grid (n_grid)

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25,
              n_grid = 100) +
  scale_fill_manual(values = cols) +
  theme_minimal()

Extra span y true range del stream plot en ggplot2

Extra span y true range (extra_span, true_range)

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(extra_span = 0.2) +
  geom_stream(extra_span = 0.2, true_range = "none",
              alpha = 0.3) +
  scale_fill_manual(values = cols) +
  theme_minimal()

Personalización de la leyenda

Como en otros gráficos de ggplot2 puedes cambiar el título, las etiquetas y eliminar o cambiar la posición de la leyenda, tal y como se muestra en los siguientes ejemplos.

Cambiar el título

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(extra_span = 0.2) +
  geom_stream(extra_span = 0.2, true_range = "none",
              alpha = 0.3) +
  scale_fill_manual(values = cols) +
  theme_minimal() +
  guides(fill = guide_legend(title = "Título"))

Cambiar el título de la leyenda de un streamgraph en ggplot2

Cambiar las etiquetas

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25) +
  scale_fill_manual(values = cols, labels = LETTERS[1:5]) +
  theme_minimal()

Cambiar las etiquetas de la leyenda en ggstream

Eliminar la leyenda

# install.packages("remotes")
# remotes::install_github("davidsjoberg/ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)

cols <- c("#FFB400", "#FFC740", "#C20008", "#FF020D", "#13AFEF")

ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
  geom_stream(color = 1, lwd = 0.25) +
  scale_fill_manual(values = cols) +
  theme_minimal() +
  theme(legend.position = "none")

Eliminar la leyenda del streamplot de ggplot2

Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar