Noter
Cliquez ici pour télécharger l'exemple de code complet
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.
Text(0.5, 1.0, 'The default settings produce a diagram like this.')
Remarquer:
Les axes n'étaient pas fournis lorsque Sankey() a été instancié, ils ont donc été créés automatiquement.
L'argument d'échelle n'était pas nécessaire puisque les données étaient déjà normalisées.
Par défaut, les longueurs des chemins sont justifiées.
Exemple 2
Cela démontre :
Définir un chemin plus long que les autres
Placer une étiquette au milieu du diagramme
Utilisation de l'argument d'échelle pour normaliser les flux
Passer implicitement des arguments de mots-clés à PathPatch()
Modification de l'angle des pointes de flèche
Modification du décalage entre les extrémités des chemins et leurs étiquettes
Formatage des nombres dans les étiquettes de chemin et l'unité associée
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')
Remarquer:
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.
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 :
Connecter deux systèmes
Désactiver les étiquettes des quantités
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()
<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.
plt.show()
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)