Corso
La bellezza dei diagrammi di Sankey sta nella loro capacità di semplificare i sistemi a più fasi. Invece di cercare tra righe di dati per trovare le perdite di energia maggiori o le allocazioni di budget più consistenti, puoi individuarle al volo cercando i flussi più spessi. Questo li rende utili per la gestione dell’energia, l’analisi finanziaria, l’ottimizzazione dei funnel di marketing e in qualsiasi situazione in cui comprendere il flusso e la trasformazione delle risorse conta più dei confronti numerici precisi.
Se vuoi ampliare le tue capacità analitiche oltre la visualizzazione dei flussi, i nostri corsi Data Visualization in Power BI e Data Visualization in Tableau ti insegnano a creare dashboard professionali e report interattivi con le principali piattaforme di business intelligence.
Cos’è un diagramma di Sankey?
Un diagramma di Sankey è una visualizzazione di flusso specializzata in cui la larghezza delle frecce di collegamento rappresenta l’entità del flusso tra diverse fasi, categorie o entità. A differenza dei tradizionali flowchart che mostrano i passaggi di un processo o dei grafici a barre che confrontano valori discreti, i diagrammi di Sankey eccellono nel mostrare come le quantità si muovono, si trasformano o vengono distribuite all’interno di un sistema.

Componenti di un diagramma di Sankey. Immagine dell’autore.
Il diagramma sopra illustra come un budget annuale di $100.000 scorre tra diverse categorie. Nota come l’allocazione al Marketing ($40.000) appaia come un flusso visibilmente più spesso rispetto a R&S ($25.000), rendendo immediatamente evidenti le differenze proporzionali.
Storia ed evoluzione dei diagrammi di Sankey
Il primo diagramma di Sankey noto risale al 1898, quando il capitano Matthew Henry Phineas Riall Sankey lo usò per mostrare l’efficienza energetica di una macchina a vapore. Il suo diagramma rivelò che solo una piccola parte dell’energia del combustibile contribuiva effettivamente al lavoro utile, mentre la maggior parte veniva persa come calore di scarto.

Tuttavia, il concetto di visualizzazione proporzionale dei flussi precede il capitano Sankey. Charles Joseph Minard creò quello che molti considerano il diagramma di flusso più famoso nel 1869, raffigurando la disastrosa campagna russa di Napoleone del 1812. Il diagramma di Minard mostrava la dimensione decrescente dell’esercito mentre avanzava in Russia e poi si ritirava, con lo spessore della linea a rappresentare il numero di soldati sopravvissuti.

Componenti di un diagramma di Sankey
Comprendere gli elementi chiave di un diagramma di Sankey ti aiuta sia a interpretarli sia a crearne di efficaci.
- Nodi: rappresentano le categorie, le fasi o le entità del tuo sistema. Nel nostro esempio di budget, "Budget annuale", "Marketing" e "Annunci digitali" sono tutti nodi. Nodi sorgente (come "Budget annuale") compaiono tipicamente a sinistra, mentre i nodi target (come "Annunci digitali") a destra, anche se può variare in base alle preferenze di layout.
- Flussi o link: sono i connettori direzionali tra i nodi e la loro larghezza è proporzionale al valore che rappresentano. Il flusso arancione spesso da Budget annuale a Marketing rappresenta $40.000, mentre il flusso molto più sottile verso Contenuti rappresenta solo $5.000. Questa larghezza proporzionale è la caratteristica distintiva che rende i diagrammi di Sankey così efficaci nel mettere in evidenza le differenze di magnitudine.
- Valori: sono i dati numerici che determinano la larghezza di ogni flusso. Possono rappresentare denaro, energia, materiali, persone o qualsiasi risorsa quantificabile che attraversa il tuo sistema. Il diagramma calcola automaticamente la larghezza appropriata in base a questi valori, garantendo accuratezza visiva.
- Perdite: sono flussi speciali che rappresentano perdite, sprechi o risorse che escono dal sistema senza raggiungere un nodo target. Anche se il nostro esempio di budget non mostra perdite, potresti vederle in diagrammi energetici che indicano dispersioni di calore o in funnel di marketing che mostrano i clienti che abbandonano il processo.
Come creare un diagramma di Sankey
Creare diagrammi di Sankey richiede approcci diversi a seconda degli strumenti preferiti e del tuo livello di confidenza tecnica. Ripercorreremo lo stesso esempio di allocazione del budget usando Excel, Python e R, così potrai scegliere il metodo più adatto al tuo flusso di lavoro e alle tue competenze.
Diagramma di Sankey in Excel
Excel non include un tipo di grafico Sankey nativo, quindi dovrai usare un componente aggiuntivo di terze parti per creare queste visualizzazioni. Per esperienza, ChartExpo è una delle opzioni più popolari e facili da usare.
Interfaccia di ChartExpo e anteprima del diagramma di Sankey. Immagine dell’autore.
Prima di creare il diagramma, dovrai strutturare i dati nel formato sorgente-target-valore, in cui ogni riga rappresenta una connessione di flusso. Per il nostro esempio di budget, questo significa elencare ogni allocazione come riga separata con la categoria sorgente, la categoria target e l’importo in dollari.
Il processo è lineare una volta installato ChartExpo. Per prima cosa, installa il componente aggiuntivo dal Microsoft AppSource o tramite il marketplace dei componenti aggiuntivi di Excel. Poi seleziona l’intervallo di dati, intestazioni incluse, e scegli Sankey Chart tra le opzioni di visualizzazione di ChartExpo.
Il componente aggiuntivo rileva automaticamente le colonne di sorgente, target e valori in base alla struttura dei dati. Come mostrato nell’interfaccia qui sopra, ChartExpo fornisce un’anteprima del diagramma insieme alle opzioni per Create Chart From Selection, personalizzare la visualizzazione o esportare il grafico finito per l’uso in presentazioni o report.
Diagramma di Sankey in Python
Python offre ottime opzioni per creare diagrammi di Sankey e Plotly è la libreria più consigliata grazie alle sue capacità interattive e alla qualità professionale dell’output. Usando lo stesso esempio di allocazione del budget da cui siamo partiti, ricreeremo quell’identica visualizzazione tramite codice.
Passo 1: preparazione dei dati
Inizia organizzando i dati nel formato atteso da Plotly. Ti serviranno tre componenti principali: un elenco di nomi dei nodi e array che specificano per ogni flusso gli indici di sorgente, gli indici di target e i valori.
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]
Gli indici corrispondono alle posizioni nell’elenco dei nodi, quindi source_indices = [0, 0, 0] significa che i primi tre flussi partono da "Annual Budget" (posizione 0).
Passo 2: creazione base del Sankey
Crea la struttura principale del diagramma usando l’oggetto Sankey di Plotly. I parametri essenziali sono la definizione dei nodi e le specifiche dei link.
fig = go.Figure(data=[go.Sankey(
node=dict(
label=nodes,
pad=15,
thickness=20
),
link=dict(
source=source_indices,
target=target_indices,
value=values
)
)])
Questo crea un diagramma di Sankey funzionale con lo stile predefinito. Il parametro pad controlla la spaziatura tra i nodi, mentre thickness determina quanto sono larghi i rettangoli dei nodi.
Passo 3: stile e personalizzazione
Migliora il diagramma con colori, layout ottimizzato e formattazione professionale.
# 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
)
Passo 4: visualizzazione ed export
Visualizza il diagramma e salvalo in vari formati per usi diversi.
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
Per le applicazioni web, puoi integrarlo direttamente nelle app Dash, rendendo i diagrammi di Sankey parte di dashboard interattive. La visualizzazione risultante corrisponde esattamente a quella vista nell’immagine iniziale. Abbiamo un ottimo code-along che ti insegna a creare dashboard con Plotly e Dash per provare tu stesso questa idea.
Diagramma di Sankey in R
R offre ottime funzionalità per creare diagrammi di Sankey tramite il pacchetto networkD3, che genera visualizzazioni interattive pronte per il web. Con i nostri dati di allocazione del budget, vedremo come R possa produrre gli stessi risultati professionali con funzionalità interattive integrate.
Il pacchetto networkD3 è progettato specificamente per creare in R visualizzazioni di rete basate su D3.js, inclusi i diagrammi di Sankey. Questo approccio offre diversi vantaggi: interattività automatica (effetti hover, zoom), facile integrazione nei report R Markdown ed esportazione fluida per la pubblicazione sul web.
Passo 1: setup e preparazione dei dati
Per prima cosa, installa e carica i pacchetti necessari, quindi struttura i dati nel formato atteso da networkD3.
# 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)
)
La differenza principale rispetto a Python è che R richiede data frame separati per nodi e link, con il data frame dei link che usa l’indicizzazione a partire da zero per riferirsi alle posizioni dei nodi.
Passo 2: creazione base del Sankey
Crea il diagramma usando la funzione sankeyNetwork() con i parametri essenziali.
# 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
Questo genera un diagramma di Sankey interattivo in cui gli utenti possono passare il mouse sui flussi per vedere i valori esatti e trascinare i nodi per riorganizzare il layout.
Passo 3: personalizzazione e stile
Migliora il diagramma con colori, dimensionamento e opzioni di formattazione professionali.
# 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
))
Passo 4: opzioni di esportazione e integrazione
Con R è facile salvare i diagrammi interattivi in più formati e integrarli nei report.
# 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)
Diagramma di Sankey interattivo creato con il pacchetto networkD3 di R. Immagine dell’autore.
Il diagramma risultante offre gli stessi insight visivi delle versioni in Python ed Excel, ma con un’interattività integrata che aiuta gli utenti a esplorare i dati più a fondo.
Alternative e confronti con i diagrammi di Sankey
I diagrammi di Sankey funzionano al meglio quando hai relazioni direzionali chiare tra categorie, dove l’entità del flusso conta più dei confronti precisi. Tuttavia, in diversi casi è meglio optare per approcci di visualizzazione differenti.
Quando non usare i diagrammi di Sankey
Evita i diagrammi di Sankey quando non c’è un flusso direzionale tra le categorie. Se i tuoi dati mostrano semplicemente gruppi o classificazioni diverse senza movimento tra di essi, i grafici a barre o a torta comunicheranno il messaggio in modo più chiaro. Ad esempio, confrontare le quote di mercato tra diverse aziende non implica un flusso: quindi è più appropriato un grafico a barre.
Evitali quando servono confronti numerici precisi. Pur mostrando bene le magnitudini relative, i diagrammi di Sankey rendono difficile cogliere valori esatti o fare confronti dettagliati a causa delle larghezze variabili. Se gli stakeholder devono confrontare con precisione percentuali o importi specifici, tabelle o grafici a barre sono più adatti.
Valuta alternative quando i dati diventano troppo complessi e affollano il diagramma. Con più di 10-15 nodi o flussi altamente interconnessi, i diagrammi di Sankey possono diventare visivamente opprimenti. Le linee che si incrociano e i flussi sovrapposti rendono difficile seguire i singoli percorsi nel sistema.
Scegli visualizzazioni più semplici quando il tuo pubblico non ha familiarità con i diagrammi di Sankey. Essendo meno comuni dei grafici a barre o a linee, alcuni pubblici potrebbero concentrarsi più sulla comprensione del formato che sull’interpretazione dei dati. Nelle presentazioni a platee generali, resta su tipi di grafici familiari a meno che la relazione di flusso non sia essenziale per il messaggio.
Alternative migliori per scenari specifici
I diagrammi alluvionali funzionano meglio per flussi categoriali o basati sul tempo, quando tracci i cambiamenti su più periodi o fasi. Mentre i diagrammi di Sankey mostrano le quantità che scorrono in un sistema in un determinato momento, gli alluvionali eccellono nel mostrare come evolvono i dati categoriali. Ad esempio, tracciare come gli elettori si spostano tra partiti politici in più elezioni, o come gli studenti cambiano corso di laurea durante l’università, si adatta meglio ai diagrammi alluvionali che ai Sankey.
I grafici a coordinate parallele sono più adatti per confrontare dati multivariati quando vuoi vedere pattern su più dimensioni contemporaneamente. Funzionano bene quando hai molte variabili per ogni punto dati e vuoi identificare cluster o outlier. Per esempio, confrontare auto per prezzo, efficienza dei consumi, valutazioni di sicurezza e metriche di prestazioni è più efficace con le coordinate parallele che cercando di forzare queste relazioni in un formato di flusso.
I bump chart gestiscono i cambiamenti di ranking nel tempo in modo più efficace rispetto ai diagrammi di Sankey o agli alluvionali. Quando mostri come diverse entità salgono o scendono in classifica nel tempo, i bump chart evidenziano chiaramente la traiettoria senza la complessità visiva dei flussi. Pensa a tracciare come cambiano le posizioni di mercato di diverse aziende trimestre dopo trimestre, o come le squadre sportive si muovono in classifica stagione dopo stagione.
Per saperne di più, leggi il post sul blog Top 5 Business Intelligence Courses to Take on DataCamp, che offre indicazioni su come acquisire competenze con gli strumenti BI più importanti.
Conclusione
Il successo di una visualizzazione dipende dalla scelta dello strumento giusto per la situazione specifica. Usa i diagrammi di Sankey quando le relazioni di flusso direzionale contano più dei confronti numerici precisi e quando il tuo pubblico deve identificare rapidamente i flussi più significativi in un sistema.
Se vuoi andare oltre i diagrammi di Sankey, il nostro post 10 Data Visualization Project Ideas for All Levels propone idee di progetti pratici a diversi livelli di complessità per costruire il tuo portfolio di visualizzazione. Questi progetti aiutano a sviluppare pensiero critico e a creare prove concrete delle tue capacità di data visualization.
Vinod Chugani ha iniziato la sua carriera a Tokyo come il più giovane Head dell'Hedge Fund Sales Desk di JPMorgan e in seguito ha stabilito un record personale di vendite a Lehman Brothers, poi ha costruito un'attività di distribuzione di elettronica in 30 paesi superando i 100 milioni di SG$ di fatturato prima di passare ai dati. Laureato in Economia alla Duke e diplomato alla NYC Data Science Academy, è stato uno dei tre beneficiari di borsa di studio su oltre 100 candidati per il corso Building AI Applications di Hugo Bowne-Anderson su Maven. Oggi scrive per DataCamp, KDnuggets, Machine Learning Mastery e Statology su argomenti che vanno dalla statistica all'AI agentica, e fa da mentor a professionisti dei dati alla NYC Data Science Academy con oltre 1.000 sessioni one-to-one all'attivo.
FAQs
Qual è la differenza tra un diagramma di Sankey e un flowchart?
Mentre i flowchart mostrano i passaggi di processo e i punti decisionali, i diagrammi di Sankey visualizzano specificamente il flusso e la quantità di risorse, energia o dati tra diverse fasi. La larghezza delle frecce nei diagrammi di Sankey è proporzionale ai valori misurati, mentre i flowchart si concentrano sulla logica del processo più che sulle quantità.
Che tipo di dati è più adatto ai diagrammi di Sankey?
I diagrammi di Sankey funzionano al meglio con dati basati sui flussi che mostrano movimento o trasformazione da una fase all’altra, come distribuzione dell’energia, funnel di conversione di un sito web, flussi della supply chain o allocazioni di budget. Non sono adatti per dati puramente categoriali o dataset senza una relazione direzionale tra variabili.
Quali sono alcuni buoni strumenti online per creare diagrammi di Sankey senza programmare?
Per chi preferisce soluzioni web, SankeyMATIC offre un’interfaccia gratuita e semplice per diagrammi di base, mentre Flourish fornisce funzionalità più avanzate e interattività per presentazioni professionali. Google Charts e Highcharts sono eccellenti per gli sviluppatori che vogliono incorporare diagrammi di Sankey nei siti web, e Visual Paradigm offre funzionalità di diagrammazione complete come parte di una suite di strumenti per il business più ampia.
Quando dovrei evitare di usare un diagramma di Sankey?
Evita i diagrammi di Sankey quando ti servono confronti numerici precisi (poiché le larghezze dei flussi possono essere difficili da misurare esattamente), quando i dati hanno troppe categorie che creerebbero disordine visivo o quando non c’è un vero flusso direzionale tra i punti dati. Valuta anche alternative più semplici se il tuo pubblico non conosce questo tipo di visualizzazione, perché la novità potrebbe oscurare il messaggio.
Come gestisco valori negativi o perdite in un diagramma di Sankey?
I diagrammi di Sankey in genere non mostrano direttamente valori negativi, poiché la larghezza delle frecce rappresenta quantità positive. Invece, mostra le perdite come flussi in uscita separati dai nodi, oppure usa flussi di abbandono che non si collegano ai nodi target per rappresentare sprechi o risorse perse.
Qual è la differenza tra diagrammi di Sankey e alluvionali?
I diagrammi di Sankey si concentrano sulle quantità di flusso in un singolo momento, mentre i diagrammi alluvionali mostrano come i dati categoriali cambiano su più periodi o fasi. I diagrammi alluvionali sono migliori per tracciare migrazioni, cambi di categoria o evoluzioni nel tempo.


