La classe Sankey #

Démontrez la classe Sankey en produisant trois diagrammes de base.

import matplotlib.pyplot as plt

from matplotlib.sankey import Sankey

Exemple 1 - Principalement des valeurs par défaut

Cela montre comment créer un diagramme simple en appelant implicitement la méthode Sankey.add() et en ajoutant finish() à l'appel à la 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.")
Les paramètres par défaut produisent un diagramme comme celui-ci.
Text(0.5, 1.0, 'The default settings produce a diagram like this.')

Remarquer:

  1. Les axes n'étaient pas fournis lorsque Sankey() a été instancié, ils ont donc été créés automatiquement.

  2. L'argument d'échelle n'était pas nécessaire puisque les données étaient déjà normalisées.

  3. Par défaut, les longueurs des chemins sont justifiées.

Exemple 2

Cela démontre :

  1. Définir un chemin plus long que les autres

  2. Placer une étiquette au milieu du diagramme

  3. Utilisation de l'argument d'échelle pour normaliser les flux

  4. Passer implicitement des arguments de mots-clés à PathPatch()

  5. Modification de l'angle des pointes de flèche

  6. Modification du décalage entre les extrémités des chemins et leurs étiquettes

  7. Formatage des nombres dans les étiquettes de chemin et l'unité associée

  8. Modification de l'apparence du patch et des étiquettes après la création de la figure

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')
Diagramme de flux d'un widget

Remarquer:

  1. Comme la somme des flux est non nulle, la largeur du tronc n'est pas uniforme. Le système de journalisation matplotlib enregistre cela au niveau DEBUG.

  2. Le deuxième flux n'apparaît pas car sa valeur est zéro. Encore une fois, cela est enregistré au niveau DEBUG.

Exemple 3

Cela démontre :

  1. Connecter deux systèmes

  2. Désactiver les étiquettes des quantités

  3. Ajout d'une légende

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()
Deux systèmes
<matplotlib.legend.Legend object at 0x7f2cdd75b5e0>

Notez qu'une seule connexion est spécifiée, mais les systèmes forment un circuit puisque : (1) les longueurs des chemins sont justifiées et (2) l'orientation et l'ordre des flux sont reflétés.

Références

L'utilisation des fonctions, méthodes, classes et modules suivants est illustrée dans cet exemple :

Durée totale d'exécution du script : ( 0 minutes 1.040 secondes)

Galerie générée par Sphinx-Gallery