
chart
streamgraph
Stacked areas around a floating central baseline.
Classification
- chart
- lines and areas › areas
- change over time; Financial Times Visual Vocabulary
- the name evokes: nature
Channels
position on common scale; main: time; Munzner 2014
length; main: value of each layer (thickness); Munzner 2014
area; secondary: value of each layer; Munzner 2014
color hue; main: series; Munzner 2014
Attestation
- English definition: Data Visualisation Guide, data.europa.eu
Scientific literature
OpenAlex: 68 papers since 2011, 26% in the last five years; mostly in Computer Science, Social Sciences, Biochemistry, Genetics and Molecular Biology; Wikidata
Seminal references
- invention (2000) Havre, Hetzler & Nowell (2000). ThemeRiver: visualizing theme changes over time. IEEE Symposium on Information Visualization (436 citations)
- formalization (2008) Byron & Wattenberg (2008). Stacked Graphs – Geometry & Aesthetics. IEEE Transactions on Visualization and Computer Graphics (347 citations)
R packages
- R
ggstream::geom_stream(); GitHub 208 stars; last commit 2021-05
R code of the ggplot2 example
library(ggplot2)
library(dplyr)
library(gapminder)
## Stacked areas centred on zero: each year's stack is shifted down by half its total.
streams <- gapminder |>
group_by(year, continent) |>
summarise(pop = sum(as.numeric(pop)) / 1e9, .groups = "drop") |>
group_by(year) |>
arrange(desc(continent), .by_group = TRUE) |>
mutate(top = cumsum(pop) - sum(pop) / 2, bottom = top - pop) |>
ungroup()
names_at <- streams |>
filter(year == 2007) |>
mutate(y = (top + bottom) / 2,
## Oceania's thin stream: its name moved below Europe's.
y = ifelse(continent == "Oceania", y - 0.15, y))
p <- ggplot(streams, aes(x = year, ymin = bottom, ymax = top, fill = continent)) +
geom_ribbon(colour = "white", linewidth = 0.2) +
geom_text(data = names_at, aes(x = 2008, y = y, label = continent, colour = continent),
hjust = 0, size = 3, inherit.aes = FALSE) +
scale_fill_manual(values = continent_colors) +
scale_colour_manual(values = continent_text_colors) +
scale_x_continuous(breaks = seq(1952, 2002, by = 10), expand = expansion(add = c(0.5, 12))) +
scale_y_continuous(labels = \(x) lex_number(abs(x))) +
labs(title = "Africa's population overtook Europe's in the 1980s",
subtitle = "Population of the 142 Gapminder countries, by continent",
x = NULL, y = "Population (billions)",
caption = "Data: Gapminder, via the gapminder R package") +
theme_lex_viz(grid = "x", arrows = "") +
theme(legend.position = "none")Sources (14)
45 occurrences in the corpus; indexed by 5 books
Show the 14 sources
- app.flourish.studio
- Better data visualizations: a guide for scholars, researchers, and wonks
- Data Visualisation Guide, data.europa.eu
- Data visualization handbook
- data-to-viz.com
- Design for information: an introduction to the histories, theories, and best practices ...
- Exploratory Data Analysis: Descriptive Analysis, Visualization, and Dashboard Design (w...
- From data to viz
- python-graph-gallery.com
- Visualization Analysis and Design
- Visualization of Time-Oriented Data
- Visualize This
- Wikipedia — Data and information visualization
- Wikipedia in English↗
Cite this entry
Stable addresshttps://dataviz.adrientaudiere.com/en-only/term/streamgraph.html
ReferenceTaudière Adrien. 2026. streamgraph. In Visualization Vocabulary, version 1.0.0. IdEst. https://dataviz.adrientaudiere.com/en-only/term/streamgraph.html
BibTeX
@incollection{taudiere2026-streamgraph,
author = {Taudière, Adrien},
title = {streamgraph},
booktitle = {Visualization Vocabulary},
year = {2026},
version = {1.0.0},
publisher = {IdEst},
url = {https://dataviz.adrientaudiere.com/en-only/term/streamgraph.html},
note = {CC0 1.0}
}Page created on 2026-10-13. Text last changed on 2026-11-12. Images last changed on 2026-11-09. Numbers computed on 2026-10-22.