Cursus
De kracht van Sankey-diagrammen is hun vermogen om meerfasige systemen te vereenvoudigen. In plaats van in rijen data te zoeken naar de grootste energieverliezen of budgettoewijzingen, zie je ze direct door te letten op de dikste stromen. Daardoor zijn ze nuttig voor energiemanagement, financiële analyse, optimalisatie van marketingfunnels en elke situatie waarin het begrijpen van de stroom en transformatie van middelen belangrijker is dan exacte numerieke vergelijkingen.
Wil je je analytische vaardigheden uitbreiden voorbij stroomvisualisatie? Onze cursussen Data Visualization in Power BI en Data Visualization in Tableau leren je professionele dashboards en interactieve rapporten te maken met toonaangevende business intelligence-platforms.
Wat is een Sankey-diagram?
Een Sankey-diagram is een gespecialiseerde stroomvisualisatie waarbij de breedte van de verbindende pijlen de grootte van de stroom tussen verschillende fasen, categorieën of entiteiten weergeeft. In tegenstelling tot traditionele flowcharts die processtappen tonen of staafdiagrammen die discrete waarden vergelijken, blinken Sankey-diagrammen uit in het laten zien hoe hoeveelheden zich bewegen, transformeren of worden verdeeld door een systeem.

Onderdelen van een Sankey-diagram getoond. Afbeelding door de auteur.
Het bovenstaande diagram laat zien hoe een jaarlijks budget van $100.000 door verschillende categorieën stroomt. Merk op hoe de toewijzing aan Marketing ($40.000) zichtbaar dikker is dan R&D ($25.000), waardoor de proportionele verschillen meteen duidelijk worden.
Geschiedenis en evolutie van Sankey-diagrammen
Het eerste bekende Sankey-diagram verscheen in 1898 toen kapitein Matthew Henry Phineas Riall Sankey het gebruikte om het energetisch rendement van een stoommachine te tonen. Zijn diagram onthulde dat slechts een klein deel van de energie uit brandstof bijdroeg aan nuttig werk, terwijl het meeste verloren ging als restwarmte.

Het concept van proportionele stroomvisualisatie is echter ouder dan kapitein Sankey. Charles Joseph Minard maakte in 1869 wat velen beschouwen als het beroemdste stroomdiagram, over Napoleons rampzalige Russische veldtocht in 1812. Minards diagram toonde de afnemende omvang van het leger tijdens de opmars naar en de terugtocht uit Rusland, met de lijndikte als representatie van het aantal overlevende soldaten.

Onderdelen van een Sankey-diagram
Als je de kernelementen van een Sankey-diagram begrijpt, kun je zowel bestaande diagrammen interpreteren als je eigen diagrammen effectief maken.
- Nodes vertegenwoordigen de categorieën, fasen of entiteiten in je systeem. In ons budgetvoorbeeld zijn "Annual Budget", "Marketing" en "Digital Ads" allemaal nodes. Bronnodes (zoals "Annual Budget") staan doorgaans links, terwijl doelnodes (zoals "Digital Ads") rechts staan, al kan dit variëren afhankelijk van je lay-outvoorkeuren.
- Stromen of links zijn de directionele verbindingen tussen nodes, en hun breedte is evenredig met de waarde die ze vertegenwoordigen. De dikke oranje stroom van Annual Budget naar Marketing staat voor $40.000, terwijl de veel dunnere stroom naar Content slechts $5.000 vertegenwoordigt. Deze proportionele breedte is het kenmerk dat Sankey-diagrammen zo effectief maakt in het benadrukken van verschillen in grootteorde.
- Waarden zijn de numerieke gegevens die de breedte van elke stroom bepalen. Dit kunnen geld, energie, materialen, mensen of elk kwantificeerbaar middel zijn dat door je systeem beweegt. Het diagram berekent automatisch de juiste breedte op basis van deze waarden, wat visuele nauwkeurigheid garandeert.
- Uitval zijn speciale stromen die verliezen, verspilling of middelen vertegenwoordigen die het systeem verlaten zonder een doelnod te bereiken. Hoewel ons budgetvoorbeeld geen uitval laat zien, kun je ze wel tegenkomen in energiediagrammen die warmteverlies tonen of in marketingfunnels waar klanten afhaken.
Hoe maak je een Sankey-diagram
Sankey-diagrammen maken vraagt om verschillende aanpakken, afhankelijk van je favoriete tools en technische comfortniveau. We doorlopen hetzelfde voorbeeld van budgettoewijzing in Excel, Python en R, zodat je de methode kunt kiezen die het beste past bij jouw workflow en expertise.
Sankey-diagram in Excel
Excel heeft geen standaard Sankey-grafiektype, wat betekent dat je een externe add-in nodig hebt om deze visualisaties te maken. Uit mijn ervaring is ChartExpo een van de meest populaire en gebruiksvriendelijke opties.
ChartExpo-interface en voorbeeld van Sankey-diagram. Afbeelding door de auteur.
Voor je het diagram maakt, moet je je data structureren in een bron-doel-waarde-indeling, waarbij elke rij één stroomverbinding vertegenwoordigt. Voor ons budgetvoorbeeld betekent dit dat je elke budgettoewijzing als een aparte rij opneemt met de broncategorie, doelcategorie en het dollarbedrag.
Zodra ChartExpo is geïnstalleerd, is het proces eenvoudig. Installeer de add-in eerst via de Microsoft AppSource of via de add-inmarktplaats van Excel. Selecteer vervolgens je gegevensbereik inclusief de koppen en kies Sankey Chart uit de visualisatie-opties van ChartExpo.
De add-in detecteert automatisch je bron-, doel- en waardekolommen op basis van je datastructuur. Zoals in de bovenstaande interface te zien is, geeft ChartExpo een voorbeeld van je diagram met opties om Create Chart From Selection te gebruiken, de visualisatie aan te passen of de voltooide grafiek te exporteren voor gebruik in presentaties of rapporten.
Sankey-diagram in Python
Python biedt uitstekende opties om Sankey-diagrammen te maken, met Plotly als de meest aanbevolen bibliotheek vanwege de interactieve mogelijkheden en professionele outputkwaliteit. Met hetzelfde voorbeeld van budgettoewijzing waarmee we begonnen, reproduceren we die identieke visualisatie via code.
Stap 1: Datavoorbereiding
Begin met het organiseren van je data in het formaat dat Plotly verwacht. Je hebt drie hoofdonderdelen nodig: een lijst met nodenamen en arrays die de bronindexen, doelindexen en waarden voor elke stroom specificeren.
import plotly.graph_objects as go
# Define all nodes in your diagram
nodes = ["Annual Budget", "Marketing", "Operations", "R&D",
"Digital Ads", "Events", "Content", "Salaries",
"Office", "Utilities", "Software", "Equipment"]
# Define the connections (using node indices)
source_indices = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3]
target_indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
values = [40, 35, 25, 25, 10, 5, 20, 10, 5, 15, 10]
De indexen komen overeen met de posities in je nodelijst, dus source_indices = [0, 0, 0] betekent dat de eerste drie stromen starten vanuit "Annual Budget" (positie 0).
Stap 2: Basis-Sankey maken
Maak de kernstructuur van het diagram met Plotly's Sankey-object. De essentiële parameters zijn de node-definities en link-specificaties.
fig = go.Figure(data=[go.Sankey(
node=dict(
label=nodes,
pad=15,
thickness=20
),
link=dict(
source=source_indices,
target=target_indices,
value=values
)
)])
Dit creëert een functioneel Sankey-diagram met standaardopmaak. De pad bepaalt de afstand tussen nodes, terwijl thickness bepaalt hoe breed de rechthoeken van de nodes zijn.
Stap 3: Styling en maatwerk
Verfraai je diagram met kleuren, een verbeterde lay-out en professionele opmaak.
# Add colors and transparency
fig.update_traces(
node_color=["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728",
"#ff9999", "#ff9999", "#ff9999", "#90ee90",
"#90ee90", "#90ee90", "#ffcccb", "#ffcccb"],
link_color=["rgba(255, 127, 14, 0.4)", "rgba(44, 160, 44, 0.4)",
"rgba(214, 39, 40, 0.4)", "rgba(255, 127, 14, 0.6)",
"rgba(255, 127, 14, 0.6)", "rgba(255, 127, 14, 0.6)",
"rgba(44, 160, 44, 0.6)", "rgba(44, 160, 44, 0.6)",
"rgba(44, 160, 44, 0.6)", "rgba(214, 39, 40, 0.6)",
"rgba(214, 39, 40, 0.6)"]
)
# Update layout for better presentation
fig.update_layout(
title="Annual Budget Allocation",
font=dict(size=16, family="Arial Black", color="black"),
width=900,
height=600
)
Stap 4: Weergave en export
Geef je diagram weer en sla het op in verschillende formaten voor diverse toepassingen.
fig.show() # Display in Jupyter notebook or browser
# Export options
fig.write_html("budget_sankey.html") # Interactive web version
fig.write_image("budget_sankey.png") # Static image
Voor webapplicaties kun je dit direct integreren in Dash-apps, zodat je Sankey-diagrammen onderdeel worden van interactieve dashboards. De resulterende visualisatie komt exact overeen met wat we in de openingsvisual zagen. We hebben een fijne code-along die je leert hoe je Dashboards bouwt met Plotly en Dash, zodat je dit idee zelf kunt uitproberen.
Sankey-diagram in R
R biedt uitstekende mogelijkheden voor het maken van Sankey-diagrammen via het networkD3-pakket, dat interactieve, webklare visualisaties maakt. Met onze vertrouwde budgetdata laten we zien hoe R dezelfde professionele resultaten kan opleveren met ingebouwde interactiviteit.
Het networkD3-pakket is specifiek ontworpen voor het maken van D3.js-gestuurde netwerkvisualisaties in R, waaronder Sankey-diagrammen. Deze aanpak biedt verschillende voordelen: automatische interactiviteit (hover-effecten, zoomen), eenvoudige integratie met R Markdown-rapporten en naadloze exportopties voor webpublicatie.
Stap 1: Setup en datavoorbereiding
Installeer en laad eerst de vereiste packages en structureer je data vervolgens in het formaat dat networkD3 verwacht.
# Install required packages (run once)
install.packages(c("networkD3", "dplyr"))
# Load libraries
library(networkD3)
library(dplyr)
# Create nodes dataframe
nodes <- data.frame(
name = c("Annual Budget", "Marketing", "Operations", "R&D",
"Digital Ads", "Events", "Content", "Salaries",
"Office", "Utilities", "Software", "Equipment")
)
# Create links dataframe (note: networkD3 uses 0-based indexing)
links <- data.frame(
source = c(0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3),
target = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
value = c(40, 35, 25, 25, 10, 5, 20, 10, 5, 15, 10)
)
Het belangrijkste verschil met Python is dat R afzonderlijke dataframes vereist voor nodes en links, waarbij het links-dataframe zero-based indexering gebruikt om naar nodeposities te verwijzen.
Stap 2: Basis-Sankey maken
Maak je diagram met de functie sankeyNetwork() en de essentiële parameters.
# Create basic Sankey diagram
sankey_plot <- sankeyNetwork(
Links = links,
Nodes = nodes,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name",
units = "K USD"
)
# Display the plot
Sankey_plot
Dit genereert een interactief Sankey-diagram waarbij gebruikers over stromen kunnen hoveren om exacte waarden te zien en nodes kunnen slepen om de lay-out te herordenen.
Stap 3: Aanpassing en styling
Breid je diagram uit met kleuren, afmetingen en professionele opmaakopties.
# Advanced Sankey with customization
(sankey_advanced <- sankeyNetwork(
Links = links,
Nodes = nodes,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name",
units = "K USD",
fontSize = 14,
fontFamily = "Arial",
nodeWidth = 30,
nodePadding = 20,
margin = list(top = 50, right = 50, bottom = 50, left = 50),
height = 600,
width = 900
))
Stap 4: Export- en integratieopties
R maakt het eenvoudig om je interactieve diagrammen in meerdere formaten op te slaan en te integreren in rapporten.
# Save as HTML file
library(htmlwidgets)
saveWidget(sankey_advanced, "budget_sankey.html", selfcontained = TRUE)
# For R Markdown integration, simply include the plot object
# The diagram will render as an interactive widget in your document
# For static image export (optional - requires webshot2 package)
install.packages("webshot2")
library(webshot2)
webshot("budget_sankey.html", "budget_sankey.png", vwidth = 900, vheight = 600)
Interactief Sankey-diagram gemaakt met het networkD3-pakket in R. Afbeelding door de auteur.
Dit resulterende diagram biedt dezelfde visuele inzichten als onze Python- en Excel-versies, maar met ingebouwde interactiviteit die gebruikers helpt de data grondiger te verkennen.
Alternatieven en vergelijkingen voor Sankey-diagrammen
Sankey-diagrammen werken het best wanneer je duidelijke directionele relaties tussen categorieën hebt, waarbij de grootte van de stroom belangrijker is dan precieze vergelijkingen. Er zijn echter situaties waarin andere visualisaties beter geschikt zijn.
Wanneer je geen Sankey-diagrammen moet gebruiken
Vermijd Sankey-diagrammen als er geen directionele stroom is tussen je categorieën. Als je data simpelweg verschillende groepen of classificaties toont zonder beweging ertussen, communiceren staaf- of cirkeldiagrammen je boodschap duidelijker. Zo vereist het vergelijken van marktaandelen tussen bedrijven geen stroom; een staafdiagram is dan geschikter.
Sla ze over wanneer je exacte numerieke vergelijkingen nodig hebt. Hoewel Sankey-diagrammen relatieve verhoudingen effectief tonen, maken de variërende breedtes het lastig om exacte waarden af te leiden of gedetailleerde vergelijkingen te maken. Als stakeholders specifieke percentages of bedragen nauwkeurig moeten vergelijken, zijn tabellen of staafdiagrammen beter.
Overweeg alternatieven wanneer je data te complex wordt en het diagram rommelig maakt. Met meer dan 10–15 nodes of sterk onderling verbonden stromen kunnen Sankey-diagrammen visueel overweldigend worden. Kruisende lijnen en overlappende stromen maken het moeilijk om individuele paden te volgen.
Kies eenvoudiger visualisaties wanneer je publiek niet bekend is met Sankey-diagrammen. Omdat ze minder gangbaar zijn dan staaf- of lijngrafieken, kan een deel van je publiek meer bezig zijn met het begrijpen van de vorm dan met het interpreteren van je data. Gebruik in presentaties voor algemene doelgroepen vertrouwde grafiektypen, tenzij de stroomrelatie essentieel is voor je boodschap.
Betere alternatieven voor specifieke scenario's
Alluvial-diagrammen werken beter voor categorische of tijdgebaseerde stromen waarbij je veranderingen over meerdere perioden of fasen volgt. Waar Sankey-diagrammen tonen hoe hoeveelheden op één moment door een systeem stromen, blinken alluvial-diagrammen uit in het laten zien hoe categorische data evolueert. Bijvoorbeeld het volgen van hoe kiezers tussen politieke partijen bewegen over meerdere verkiezingen, of hoe studenten van studierichting wisselen gedurende hun studie, past beter bij alluvial-diagrammen dan bij Sankey-diagrammen.
Parallelle coördinatenplots zijn geschikter voor het vergelijken van multivariate data waarbij je patronen over meerdere dimensies tegelijk wilt zien. Deze werken goed wanneer je veel variabelen per datapunt hebt en clusters of uitschieters wilt identificeren. Bijvoorbeeld het vergelijken van auto's op prijs, brandstofefficiëntie, veiligheidsbeoordelingen en prestatiecijfers werkt beter met parallelle coördinaten dan wanneer je die relaties in een stroomformat probeert te persen.
Bump charts tonen rangveranderingen in de tijd effectiever dan zowel Sankey- als alluvial-diagrammen. Wanneer je laat zien hoe verschillende entiteiten stijgen of dalen in ranglijsten over perioden, tonen bump charts het verloop helder zonder de visuele complexiteit van stromen. Denk aan het volgen van hoe de marktposities van bedrijven per kwartaal veranderen, of hoe sportteams zich door de ranglijsten bewegen over seizoenen.
Wil je meer weten? Lees onze blogpost Top 5 Business Intelligence Courses to Take on DataCamp, met tips om expertise op te bouwen in de belangrijkste BI-tools.
Conclusie
Succesvolle visualisatie hangt af van het kiezen van de juiste tool voor jouw situatie. Gebruik Sankey-diagrammen wanneer directionele stroomrelaties belangrijker zijn dan precieze numerieke vergelijkingen, en wanneer je publiek snel de belangrijkste stromen in een systeem moet kunnen identificeren.
Voor lezers die verder willen gaan dan Sankey-diagrammen biedt onze blogpost 10 Data Visualization Project Ideas for All Levels hands-on projectvoorstellen op verschillende niveaus om je visualisatieportfolio op te bouwen. Deze projecten helpen je kritisch te leren denken en vormen tastbaar bewijs van je datavisualisatievaardigheden.
Vinod Chugani begon zijn carrière in Tokio als JPMorgans jongste Head van de Hedge Fund Sales Desk en vestigde later een individueel verkooprecord bij Lehman Brothers, bouwde daarna een elektronicadistributiebedrijf in 30 landen uit tot voorbij SG$100 miljoen omzet en maakte vervolgens de overstap naar data. Als afgestudeerde Economie aan Duke en alumnus van de NYC Data Science Academy was hij een van de drie beursontvangers uit meer dan 100 aanmeldingen voor Hugo Bowne-Andersons Building AI Applications-cursus op Maven. Tegenwoordig schrijft hij voor DataCamp, KDnuggets, Machine Learning Mastery en Statology over onderwerpen van statistiek tot agentische AI, en coacht hij dataprofessionals bij de NYC Data Science Academy met meer dan 1.000 één-op-één-sessies op zijn naam.
FAQs
Wat is het verschil tussen een Sankey-diagram en een flowchart?
Waar flowcharts processtappen en beslismomenten tonen, visualiseren Sankey-diagrammen specifiek de stroom en hoeveelheid van middelen, energie of data tussen verschillende fasen. De breedte van de pijlen in Sankey-diagrammen is evenredig met de gemeten waarden, terwijl flowcharts focussen op proceslogica in plaats van hoeveelheden.
Voor welk soort data zijn Sankey-diagrammen het meest geschikt?
Sankey-diagrammen werken het best met op stroom gebaseerde data die beweging of transformatie van de ene fase naar de andere laat zien, zoals energiedistributie, websiteconversiefunnels, supplychain-stromen of budgettoewijzingen. Ze zijn niet geschikt voor puur categorische data of datasets zonder directionele relatie tussen variabelen.
Wat zijn goede onlinetools om Sankey-diagrammen te maken zonder te coderen?
Voor wie liever webgebaseerde oplossingen gebruikt, biedt SankeyMATIC een gratis, eenvoudige interface voor basisdiagrammen, terwijl Flourish meer geavanceerde functies en interactiviteit biedt voor professionele presentaties. Google Charts en Highcharts zijn uitstekend voor ontwikkelaars die Sankey-diagrammen in websites willen inbedden, en Visual Paradigm biedt uitgebreide diagrammogelijkheden als onderdeel van een bredere zakelijke toolset.
Wanneer moet ik een Sankey-diagram vermijden?
Vermijd Sankey-diagrammen wanneer je precieze numerieke vergelijkingen nodig hebt (omdat stroombreedtes lastig exact te meten zijn), wanneer je data te veel categorieën bevat die visuele ruis veroorzaken, of wanneer er geen echte directionele stroom is tussen je datapunten. Overweeg ook eenvoudigere alternatieven als je publiek niet vertrouwd is met dit type visualisatie, omdat de nieuwigheid je boodschap kan overschaduwen.
Hoe ga ik om met negatieve waarden of verliezen in een Sankey-diagram?
Sankey-diagrammen tonen doorgaans geen negatieve waarden direct, omdat pijlbreedtes positieve hoeveelheden representeren. Toon verliezen in plaats daarvan als aparte uitgaande stromen vanaf nodes, of gebruik uitvalstromen die niet met doelnodes verbinden om verspilling of verloren middelen weer te geven.
Wat is het verschil tussen Sankey- en alluvial-diagrammen?
Sankey-diagrammen focussen op stroomhoeveelheden op één moment in de tijd, terwijl alluvial-diagrammen laten zien hoe categorische data verandert over meerdere tijdsperioden of fasen. Alluvial-diagrammen zijn beter voor het volgen van migratie, categoriewijzigingen of evolutie in de tijd.

