Diagramma di Sankey

Panoramica

Un diagramma di Sankey è una visualizzazione utilizzata per rappresentare un flusso da un insieme di valori a un altro. Gli elementi connessi vengono chiamati nodi e le connessioni vengono chiamate link. Le Sankey sono ideali quando vuoi mostrare una mappatura many-to-many tra due domini (ad es.università e principali) o più percorsi attraverso una serie di fasi (ad es. Google Analytics utilizza le sankey per mostrare come il traffico passa dalle pagine ad altre pagine del tuo sito web).

Per curiosità prendono il nome dal capitano Sankey, che creò un diagramma dell'efficienza dei motori a vapore che utilizzava frecce di larghezza proporzionale alla dispersione di calore.

Nota: il grafico delle sanzioni potrebbe essere soggetto a revisioni sostanziali nelle prossime versioni di Google Class.

I diagrammi di Sankey vengono visualizzati nel browser utilizzando SVG o VML, a seconda di quale risulti appropriato per il browser dell'utente. Il codice di layout sankey di Google ricava il codice di layout sankey di D3.

Nota: i grafici con le sankey di Google non sono disponibili in Microsoft Internet Explorer 8 e nelle versioni precedenti.

Esempio semplice

Supponi di avere due categorie, A e B, che si collegano ad altre tre categorie, X, Y e Z. Alcune di queste connessioni sono più pesanti di altre. Ad esempio, B ha una connessione sottile a X e una connessione molto più spessa a Y.


Prova a passare il mouse sopra uno dei link per evidenziare la connessione.

Per creare un grafico delle condizioni, fornisci un insieme di righe, ciascuna contenente informazioni su una connessione: da, a e peso. Quindi utilizza il metodo google.visualization.Sankey() per inizializzare il grafico e poi il metodo draw() per eseguire il rendering:

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['sankey']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'From');
        data.addColumn('string', 'To');
        data.addColumn('number', 'Weight');
        data.addRows([
          [ 'A', 'X', 5 ],
          [ 'A', 'Y', 7 ],
          [ 'A', 'Z', 6 ],
          [ 'B', 'X', 2 ],
          [ 'B', 'Y', 9 ],
          [ 'B', 'Z', 4 ]
        ]);

        // Sets chart options.
        var options = {
          width: 600,
        };

        // Instantiates and draws our chart, passing in some options.
        var chart = new google.visualization.Sankey(document.getElementById('sankey_basic'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="sankey_basic" style="width: 900px; height: 300px;"></div>
  </body>
</html>

Nota: evita di cicli nei tuoi dati: se A rimanda a se stesso o ai link B che rimandano a C e A, il grafico non viene visualizzato.

Sankey multilivello

Puoi creare un grafico Sankey con più livelli di connessioni:

I grafici Sankey aggiungono ulteriori livelli in base alle necessità, disposti automaticamente. Ecco il codice completo per il grafico sopra:

<html>
<body>
 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

<div id="sankey_multiple" style="width: 900px; height: 300px;"></div>

<script type="text/javascript">
  google.charts.load("current", {packages:["sankey"]});
  google.charts.setOnLoadCallback(drawChart);
   function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'From');
    data.addColumn('string', 'To');
    data.addColumn('number', 'Weight');
    data.addRows([
       [ 'Brazil', 'Portugal', 5 ],
       [ 'Brazil', 'France', 1 ],
       [ 'Brazil', 'Spain', 1 ],
       [ 'Brazil', 'England', 1 ],
       [ 'Canada', 'Portugal', 1 ],
       [ 'Canada', 'France', 5 ],
       [ 'Canada', 'England', 1 ],
       [ 'Mexico', 'Portugal', 1 ],
       [ 'Mexico', 'France', 1 ],
       [ 'Mexico', 'Spain', 5 ],
       [ 'Mexico', 'England', 1 ],
       [ 'USA', 'Portugal', 1 ],
       [ 'USA', 'France', 1 ],
       [ 'USA', 'Spain', 1 ],
       [ 'USA', 'England', 5 ],
       [ 'Portugal', 'Angola', 2 ],
       [ 'Portugal', 'Senegal', 1 ],
       [ 'Portugal', 'Morocco', 1 ],
       [ 'Portugal', 'South Africa', 3 ],
       [ 'France', 'Angola', 1 ],
       [ 'France', 'Senegal', 3 ],
       [ 'France', 'Mali', 3 ],
       [ 'France', 'Morocco', 3 ],
       [ 'France', 'South Africa', 1 ],
       [ 'Spain', 'Senegal', 1 ],
       [ 'Spain', 'Morocco', 3 ],
       [ 'Spain', 'South Africa', 1 ],
       [ 'England', 'Angola', 1 ],
       [ 'England', 'Senegal', 1 ],
       [ 'England', 'Morocco', 2 ],
       [ 'England', 'South Africa', 7 ],
       [ 'South Africa', 'China', 5 ],
       [ 'South Africa', 'India', 1 ],
       [ 'South Africa', 'Japan', 3 ],
       [ 'Angola', 'China', 5 ],
       [ 'Angola', 'India', 1 ],
       [ 'Angola', 'Japan', 3 ],
       [ 'Senegal', 'China', 5 ],
       [ 'Senegal', 'India', 1 ],
       [ 'Senegal', 'Japan', 3 ],
       [ 'Mali', 'China', 5 ],
       [ 'Mali', 'India', 1 ],
       [ 'Mali', 'Japan', 3 ],
       [ 'Morocco', 'China', 5 ],
       [ 'Morocco', 'India', 1 ],
       [ 'Morocco', 'Japan', 3 ]
    ]);

    // Set chart options
    var options = {
      width: 600,
    };

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.visualization.Sankey(document.getElementById('sankey_multiple'));
    chart.draw(data, options);
   }
</script>
</body>
</html>

Controllo dei colori

I grafici Sankey possono impostare colori personalizzati per nodi e link. Sia ai nodi che ai link possono essere fornite tavolozze dei colori personalizzate utilizzando le relative opzioni colors (sankey.node.colors e sankey.link.colors). Possono essere anche offerte diverse modalità di colorazione utilizzando l'opzione colorMode.

Se i colori non sono personalizzati, viene usata per impostazione predefinita la tavolozza dei materiali standard.

    var colors = ['#a6cee3', '#b2df8a', '#fb9a99', '#fdbf6f',
                  '#cab2d6', '#ffff99', '#1f78b4', '#33a02c'];

    var options = {
      height: 400,
      sankey: {
        node: {
          colors: colors
        },
        link: {
          colorMode: 'gradient',
          colors: colors
        }
      }
    };

Puoi controllare i colori di link, nodi ed etichette utilizzando le opzioni di configurazione. Ne selezioniamo tre con la stessa tonalità, ma con luminosità diverse:

Ecco come si presentano queste opzioni:

    var options = {
      width: 600,
      sankey: {
        link: { color: { fill: '#d799ae' } },
        node: { colors: [ '#a61d4c' ],
                label: { color: '#871b47' } },
      }
    };

Puoi anche controllare la trasparenza dei link con l'opzione sankey.link.color.fillOpacity:

    var options = {
      width: 600,
      sankey: {
        link: { color: { fill: '#d799ae', fillOpacity: 0.8 } },
        node: { colors: [ '#a61d4c' ],
                label: { color: '#871b47' } },
      }
    };

Per creare un bordo attorno ai link, usa le opzioni sankey.link.color.stroke e sankey.link.color.strokeWidth:

Il colore del tratto può essere specificato in formato RGB o in nome inglese.

    var options = {
      width: 750,
      height: 400,
      sankey: {
        node: { colors: [ '#a61d4c' ] },
        link: { color: { stroke: 'black', strokeWidth: 1 } },
      }
    };

Personalizzare le etichette

Il testo sui grafici di emergenza può essere personalizzato utilizzando sankey.node.label.fontName e i suoi amici:

Di seguito è riportata la rappresentazione dell'opzione per il grafico riportato sopra:

    var options = {
      width: 600,
      sankey: {
        node: { label: { fontName: 'Times-Roman',
                         fontSize: 14,
                         color: '#871b47',
                         bold: true,
                         italic: true } } },
    };

Puoi regolare la posizione delle etichette rispetto ai nodi con l'opzione sankey.node.labelPadding:

Nel grafico sopra, abbiamo aggiunto 30 pixel di spaziatura interna tra le etichette e i nodi.

    var options = {
      width: 600,
      sankey: { node: { labelPadding: 30 } },
    };

Regolare i nodi

Puoi controllare la larghezza dei nodi con sankey.node.width:

Sopra, impostiamo la larghezza del nodo su 2.

    var options = {
      width: 600,
      sankey: { node: { width: 2 } },
    };

Puoi regolare la distanza tra i nodi con sankey.node.nodePadding:

Nel grafico sopra, abbiamo impostato sankey.node.nodePadding su 80.

    var options = {
      width: 900,
      sankey: { node: { nodePadding: 80 } },
    };

Caricamento

Il nome del pacchetto google.charts.load è "sankey":

  google.charts.load("current" {packages: ["sankey"]});

Il nome della classe della visualizzazione è google.visualization.Sankey:

  var visualization = new google.visualization.Sankey(container);

Formato dei dati

Righe:ogni riga della tabella rappresenta una connessione tra due etichette. La terza colonna indica la forza della connessione e si rifletterà nella larghezza del percorso tra le etichette.

Colonne:

  Colonna 0 Colonna 1 Colonna 2 Colonna N (facoltativa)
Finalità: Origine Destinazione Valore Ruoli facoltativi
Tipo di dati: stringa stringa numero
Ruolo: dominio dominio dati
Ruoli di colonna facoltativi:

Assente

Assente

Assente

 

Opzioni di configurazione

Nome
Forza iframe

Disegna il grafico all'interno di un frame in linea. (Tieni presente che su IE8 questa opzione viene ignorata, mentre tutti i grafici IE8 vengono tracciati negli i-frames.)

Tipo: booleano
Predefinito: falso
altezza

Altezza del grafico, in pixel.

Tipo: numero
Predefinito: altezza dell'elemento contenitore
sankey.iterations

Con le sansh multilivello, a volte non è evidente dove posizionare i nodi per una leggibilità ottimale. Il motore del layout D3 prova layout dei nodi diversi, interrompendosi quando vengono eseguiti sankey.iterations tentativi. Maggiore è questo numero, più è gradevole il layout delle sansh complesse, ma ha un costo: le sansh impiegheranno più tempo per il rendering. Al contrario, più breve è questo numero, più rapido sarà il rendering dei grafici.

Tipo: numero intero
Predefinito: 32
link sankey.

Controlla gli attributi delle connessioni tra i nodi. Attualmente tutti gli attributi riguardano il colore:

sankey: {
  link: {
    color: {
      fill: '#efd',     // Color of the link.
      fillOpacity: 0.8, // Transparency of the link.
      stroke: 'black',  // Color of the link border.
      strokeWidth: 1    // Thickness of the link border (default 0).
    },
    colors: [
      '#a6cee3',        // Custom color palette for sankey links.
      '#1f78b4',        // Nodes will cycle through this palette
      '#b2df8a',        // giving the links for that node the color.
      '#33a02c'
    ]
  }
}
      
Tipo: oggetto
Valore predefinito: null
sankey.link.colorMode

Imposta una modalità di colorazione per i collegamenti tra nodi. Valori possibili:

  • 'source': il colore del nodo di origine viene utilizzato per i link a tutti i nodi di destinazione.
  • 'target': il colore del nodo di destinazione viene utilizzato per il collegamento ai suoi nodi di origine.
  • 'gradient': il collegamento tra un nodo di origine e di destinazione viene rappresentato con un gradiente dal colore del nodo di origine al colore del nodo di destinazione.
  • 'none': l'opzione predefinita; i colori dei link verranno impostati sul valore predefinito (o impostato su un colore specificato dalle opzioni sankey.link.color.fill e sankey.link.color.fillOpacity).

Questa opzione sostituisce sankey.link.color.

Tipo: stringa
Predefinito: "nessuno"
sankey.node

Controlla gli attributi dei nodi (le barre verticali tra i link):

sankey: {
  node: {
    label: {
      fontName: 'Times-Roman',
      fontSize: 12,
      color: '#000',
      bold: true,
      italic: false
    },
    interactivity: true, // Allows you to select nodes.
    labelPadding: 6,     // Horizontal distance between the label and the node.
    nodePadding: 10,     // Vertical distance between nodes.
    width: 5,            // Thickness of the node.
    colors: [
      '#a6cee3',         // Custom color palette for sankey nodes.
      '#1f78b4',         // Nodes will cycle through this palette
      '#b2df8a',         // giving each node its own color.
      '#33a02c'
    ]
  }
}
      
Tipo: oggetto
Valore predefinito: null
sankey.node.colorMode

Imposta una modalità di colorazione per i nodi sankey. Valori possibili:

  • 'unique': ogni nodo riceverà un colore univoco.
Tipo: stringa
Predefinito: "univoco"
descrizione comando

Un oggetto con membri per configurare i vari elementi della descrizione comando. Per specificare le proprietà di questo oggetto, puoi utilizzare la notazione letterale dell'oggetto, come mostrato di seguito:

{textStyle: {color: '#FF0000'}, showColorCode: true}
Tipo: oggetto
Valore predefinito: null
tooltip.isHTML

Se è impostata su true, utilizza le descrizioni comando HTML-rendering (anziché rendering SVG). Per ulteriori dettagli, consulta Personalizzazione del contenuto della descrizione comando.

Nota: la personalizzazione dei contenuti della descrizione comando HTML tramite il ruolo di dati della colonna Descrizione comando non è supportata dalla visualizzazione del grafico a bolle.

Tipo: booleano
Predefinito: falso
tooltip.textStyle

Un oggetto che specifica lo stile del testo della descrizione comando. L'oggetto ha questo formato:

{ color: <string>,
  fontName: <string>,
  fontSize: <number>,
  bold: <boolean>,
  italic: <boolean> }
    

color può essere qualsiasi stringa di colore HTML, ad esempio: 'red' o '#00cc00'. Vedi anche fontName e fontSize.

Tipo: oggetto
Predefinito: {color: 'black', fontName: <global-font-name>, fontSize: <global-font-size>}
width

Larghezza del grafico, in pixel.

Tipo: numero
Predefinito: larghezza dell'elemento che lo contiene

Metodi

Metodo
draw(data, options)

Disegna il grafico. Il grafico accetta ulteriori chiamate di metodo solo dopo l'attivazione dell'evento ready. Extended description.

Tipo di reso:nessuno
getBoundingBox(id)

Restituisce un oggetto contenente la parte sinistra, superiore, larghezza e altezza dell'elemento grafico id. Il formato per id non è ancora documentato (sono i valori di ritorno dei gestori di eventi), ma ecco alcuni esempi:

var cli = chart.getChartLayoutInterface();

Altezza dell'area del grafico
cli.getBoundingBox('chartarea').height
Larghezza della terza barra nella prima serie di un grafico a barre o a colonne
cli.getBoundingBox('bar#0#2').width
Scatola di delimitazione del quinto cuneo di un grafico a torta
cli.getBoundingBox('slice#4')
Riquadro di delimitazione dei dati di un grafico verticale (ad es. a colonna):
cli.getBoundingBox('vAxis#0#gridline')
Riquadro di delimitazione dei dati di un grafico orizzontale (ad es. a barre):
cli.getBoundingBox('hAxis#0#gridline')

I valori sono relativi al contenitore del grafico. Chiamalo dopo il disegno del grafico.

Tipo di ritorno: oggetto
getSelection()

Restituisce una matrice delle entità del grafico selezionate. Le entità selezionabili sono barre, voci di legenda e categorie. Per questo grafico, è possibile selezionare una sola entità alla volta. Extended description .

Tipo di ritorno:array di elementi di selezione.
setSelection()

Seleziona le entità del grafico specificate. Annulla qualsiasi selezione precedente. Le entità selezionabili sono barre, voci di legenda e categorie. Per questo grafico, è possibile selezionare una sola entità alla volta. Extended description .

Tipo di reso:nessuno
clearChart()

Cancella il grafico e rilascia tutte le risorse allocate.

Tipo di reso:nessuno

Eventi

Nome
error

Attivato quando si verifica un errore durante il tentativo di rendering del grafico.

Properties: id (messaggio): id
onmouseover

Attivato quando l'utente passa il mouse sopra un'entità visiva. Ritrae gli indici delle righe e delle colonne dell'elemento della tabella di dati corrispondente. Una barra è correlata a una cella della tabella dati, una voce di legenda a una colonna (l'indice della riga è null) e una categoria a una riga (l'indice della colonna è null).

Proprietà: riga, colonna
onmouseout

Attivato quando l'utente allontana il mouse da un'entità visiva. Ritrae gli indici di riga e colonna dell'elemento della tabella di dati corrispondente. Una barra è correlata a una cella della tabella dati, una voce di legenda a una colonna (l'indice della riga è null) e una categoria a una riga (l'indice della colonna è null).

Proprietà: riga, colonna
ready

Il grafico è pronto per le chiamate ai metodi esterni. Se vuoi interagire con il grafico e chiamare i metodi dopo averlo tracciato, devi impostare un listener per questo evento prima di chiamare il metodo draw e chiamarlo solo dopo che è stato attivato l'evento.

Proprietà: nessuna
select

Attivato quando l'utente fa clic su un'entità visiva. Per sapere cosa è stato selezionato, chiama getSelection().

Proprietà: nessuna

Norme sui dati

Tutto il codice e i dati vengono elaborati e visualizzati nel browser. Nessun dato viene inviato ad alcun server.