Considera el conjunto de datos blockbusters del paquete ggstream para esta guía.
# install.packages("ggstream")
library(ggstream)
blockbusters
geom_stream
La función geom_stream del paquete ggstream permite crear streamplots en ggplot2. Pasa tu dataframe y usa la función para crear un stream graph básico.
# install.packages("ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)
ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
geom_stream()

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("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))

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.

Ridge
# install.packages("ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)
ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
geom_stream(type = "ridge")

Proportional
# install.packages("ggstream")
library(ggstream)
# install.packages("ggplot2")
library(ggplot2)
ggplot(blockbusters, aes(x = year, y = box_office, fill = genre)) +
geom_stream(type = "proportional")
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("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)

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("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)

Cambiar el tema
Ten en cuenta que también puedes cambiar el tema para modificar la apariencia del gráfico.
# install.packages("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()

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.

Ventana (bw)
# install.packages("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()

Grid (n_grid)
# install.packages("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 (extra_span, true_range)
# install.packages("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()
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("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 las etiquetas
# install.packages("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()

Eliminar la leyenda
# install.packages("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")

También te puede interesar