La classe Sankey #

Dimostrare la classe Sankey producendo tre diagrammi di base.

import matplotlib.pyplot as plt

from matplotlib.sankey import Sankey

Esempio 1 -- Prevalentemente valori predefiniti

Questo dimostra come creare un diagramma semplice chiamando implicitamente il metodo Sankey.add() e aggiungendo finish() alla chiamata alla classe.

Sankey(flows=[0.25, 0.15, 0.60, -0.20, -0.15, -0.05, -0.50, -0.10],
       labels=['', '', '', 'First', 'Second', 'Third', 'Fourth', 'Fifth'],
       orientations=[-1, 1, 0, 1, 1, 1, 0, -1]).finish()
plt.title("The default settings produce a diagram like this.")
Le impostazioni predefinite producono un diagramma come questo.
Text(0.5, 1.0, 'The default settings produce a diagram like this.')

Avviso:

  1. Gli assi non sono stati forniti quando Sankey() è stato istanziato, quindi sono stati creati automaticamente.

  2. L'argomento scale non era necessario poiché i dati erano già stati normalizzati.

  3. Per impostazione predefinita, le lunghezze dei percorsi sono giustificate.

Esempio 2

Ciò dimostra:

  1. Impostare un percorso più lungo degli altri

  2. Inserimento di un'etichetta al centro del diagramma

  3. Utilizzo dell'argomento scale per normalizzare i flussi

  4. Passaggio implicito di argomenti di parole chiave a PathPatch()

  5. Cambiare l'angolo delle punte delle frecce

  6. Modifica dell'offset tra le punte dei tracciati e le relative etichette

  7. Formattazione dei numeri nelle etichette del percorso e dell'unità associata

  8. Modifica dell'aspetto della toppa e delle etichette dopo la creazione della figura

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
                     title="Flow Diagram of a Widget")
sankey = Sankey(ax=ax, scale=0.01, offset=0.2, head_angle=180,
                format='%.0f', unit='%')
sankey.add(flows=[25, 0, 60, -10, -20, -5, -15, -10, -40],
           labels=['', '', '', 'First', 'Second', 'Third', 'Fourth',
                   'Fifth', 'Hurray!'],
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0],
           pathlengths=[0.25, 0.25, 0.25, 0.25, 0.25, 0.6, 0.25, 0.25,
                        0.25],
           patchlabel="Widget\nA")  # Arguments to matplotlib.patches.PathPatch
diagrams = sankey.finish()
diagrams[0].texts[-1].set_color('r')
diagrams[0].text.set_fontweight('bold')
Diagramma di flusso di un widget

Avviso:

  1. Poiché la somma dei flussi è diversa da zero, la larghezza del tronco non è uniforme. Il sistema di registrazione matplotlib lo registra a livello DEBUG.

  2. Il secondo flusso non viene visualizzato perché il suo valore è zero. Ancora una volta, questo viene registrato a livello DEBUG.

Esempio 3

Ciò dimostra:

  1. Collegamento di due sistemi

  2. Spegnere le etichette delle quantità

  3. Aggiunta di una legenda

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Two Systems")
flows = [0.25, 0.15, 0.60, -0.10, -0.05, -0.25, -0.15, -0.10, -0.35]
sankey = Sankey(ax=ax, unit=None)
sankey.add(flows=flows, label='one',
           orientations=[-1, 1, 0, 1, 1, 1, -1, -1, 0])
sankey.add(flows=[-0.25, 0.15, 0.1], label='two',
           orientations=[-1, -1, -1], prior=0, connect=(0, 0))
diagrams = sankey.finish()
diagrams[-1].patch.set_hatch('/')
plt.legend()
Due Sistemi
<matplotlib.legend.Legend object at 0x7f2cdd75b5e0>

Si noti che è specificata una sola connessione, ma i sistemi formano un circuito poiché: (1) le lunghezze dei percorsi sono giustificate e (2) l'orientamento e l'ordinamento dei flussi è rispecchiato.

Riferimenti

L'uso delle seguenti funzioni, metodi, classi e moduli è mostrato in questo esempio:

Tempo di esecuzione totale dello script: (0 minuti 1.040 secondi)

Galleria generata da Sphinx-Gallery