Création d'un diagramme Sankey

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons apprendre à créer un diagramme Sankey à l'aide de la bibliothèque Matplotlib de Python. Les diagrammes Sankey sont un type de diagramme de flux qui sont couramment utilisés pour visualiser le flux d'énergie ou de matériaux à travers un système. Ils sont particulièrement utiles pour analyser des systèmes complexes avec de multiples entrées et sorties.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) matplotlib(("Matplotlib")) -.-> matplotlib/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) matplotlib/BasicConceptsGroup -.-> matplotlib/importing_matplotlib("Importing Matplotlib") matplotlib/BasicConceptsGroup -.-> matplotlib/figures_axes("Understanding Figures and Axes") python/BasicConceptsGroup -.-> python/comments("Comments") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/DataStructuresGroup -.-> python/tuples("Tuples") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ModulesandPackagesGroup -.-> python/using_packages("Using Packages") python/DataScienceandMachineLearningGroup -.-> python/data_visualization("Data Visualization") subgraph Lab Skills matplotlib/importing_matplotlib -.-> lab-48909{{"Création d'un diagramme Sankey"}} matplotlib/figures_axes -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/comments -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/for_loops -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/lists -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/tuples -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/importing_modules -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/using_packages -.-> lab-48909{{"Création d'un diagramme Sankey"}} python/data_visualization -.-> lab-48909{{"Création d'un diagramme Sankey"}} end

Importez les bibliothèques requises

Nous allons commencer par importer les bibliothèques nécessaires pour créer des diagrammes Sankey à l'aide de Matplotlib. Nous allons importer la classe Sankey du module matplotlib.sankey, et le module pyplot de Matplotlib.

import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey

Définissez les données

Ensuite, nous allons définir les données que nous voulons visualiser à l'aide du diagramme Sankey. Dans cet exemple, nous utiliserons les données de l'Exemple 8.6 de "Fundamentals of Engineering Thermodynamics" de Moran et Shapiro. Les données représentent le flux d'énergie à travers un cycle de puissance Rankine. Nous allons définir les flux d'énergie comme une liste de valeurs.

Hdot = [260.431, 35.078, 180.794, 221.115, 22.700,
        142.361, 10.193, 10.210, 43.670, 44.312,
        68.631, 10.758, 10.758, 0.017, 0.642,
        232.121, 44.559, 100.613, 132.168]  ## MW

Créez la figure et les axes

Nous allons créer un objet figure et y ajouter un seul ensemble d'axes. Nous allons également définir le titre du tracé.

fig = plt.figure(figsize=(8, 9))
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
                     title="Rankine Power Cycle: Example 8.6 from Moran and "
                     "Shapiro\n\x22Fundamentals of Engineering Thermodynamics "
                     "\x22, 6th ed., 2008")

Créez le diagramme Sankey

Nous allons créer une instance de la classe Sankey et passer l'objet d'axes que nous avons créé à l'étape 3. Nous allons également définir le format des valeurs de flux et l'unité de mesure. Ensuite, nous ajouterons les flux au diagramme en utilisant la méthode add. Nous spécifierons la couleur de chaque flux en utilisant le paramètre facecolor, et les étiquettes de chaque flux en utilisant le paramètre labels. Nous spécifierons également les longueurs de chemin pour chaque flux en utilisant le paramètre pathlengths et l'orientation de chaque flux en utilisant le paramètre orientations. Enfin, nous connecterons les flux en utilisant le paramètre connect.

sankey = Sankey(ax=ax, format='%.3G', unit=' MW', gap=0.5, scale=1.0/Hdot[0])
sankey.add(patchlabel='\n\nPompe 1', rotation=90, facecolor='#37c959',
           flows=[Hdot[13], Hdot[6], -Hdot[7]],
           labels=['Puissance d'arbre', '', None],
           pathlengths=[0.4, 0.883, 0.25],
           orientations=[1, -1, 0])
sankey.add(patchlabel='\n\nRéchauffeur\nouvert', facecolor='#37c959',
           flows=[Hdot[11], Hdot[7], Hdot[4], -Hdot[8]],
           labels=[None, '', None, None],
           pathlengths=[0.25, 0.25, 1.93, 0.25],
           orientations=[1, 0, -1, 0], prior=0, connect=(2, 1))
sankey.add(patchlabel='\n\nPompe 2', facecolor='#37c959',
           flows=[Hdot[14], Hdot[8], -Hdot[9]],
           labels=['Puissance d'arbre', '', None],
           pathlengths=[0.4, 0.25, 0.25],
           orientations=[1, 0, 0], prior=1, connect=(3, 1))
sankey.add(patchlabel='Réchauffeur\nfermé', trunklength=2.914, fc='#37c959',
           flows=[Hdot[9], Hdot[1], -Hdot[11], -Hdot[10]],
           pathlengths=[0.25, 1.543, 0.25, 0.25],
           labels=['', '', None, None],
           orientations=[0, -1, 1, -1], prior=2, connect=(2, 0))
sankey.add(patchlabel='Trappe', facecolor='#37c959', trunklength=5.102,
           flows=[Hdot[11], -Hdot[12]],
           labels=['\n', None],
           pathlengths=[1.0, 1.01],
           orientations=[1, 1], prior=3, connect=(2, 0))
sankey.add(patchlabel='Générateur\n de vapeur', facecolor='#ff5555',
           flows=[Hdot[15], Hdot[10], Hdot[2], -Hdot[3], -Hdot[0]],
           labels=['Débit de chaleur', '', '', None, None],
           pathlengths=0.25,
           orientations=[1, 0, -1, -1, -1], prior=3, connect=(3, 1))
sankey.add(patchlabel='\n\n\nTurbine 1', facecolor='#37c959',
           flows=[Hdot[0], -Hdot[16], -Hdot[1], -Hdot[2]],
           labels=['', None, None, None],
           pathlengths=[0.25, 0.153, 1.543, 0.25],
           orientations=[0, 1, -1, -1], prior=5, connect=(4, 0))
sankey.add(patchlabel='\n\n\nRechauffement', facecolor='#37c959',
           flows=[Hdot[2], -Hdot[2]],
           labels=[None, None],
           pathlengths=[0.725, 0.25],
           orientations=[-1, 0], prior=6, connect=(3, 0))
sankey.add(patchlabel='Turbine 2', trunklength=3.212, facecolor='#37c959',
           flows=[Hdot[3], Hdot[16], -Hdot[5], -Hdot[4], -Hdot[17]],
           labels=[None, 'Puissance d'arbre', None, '', 'Puissance d'arbre'],
           pathlengths=[0.751, 0.15, 0.25, 1.93, 0.25],
           orientations=[0, -1, 0, -1, 1], prior=6, connect=(1, 1))
sankey.add(patchlabel='Condenseur', facecolor='#58b1fa', trunklength=1.764,
           flows=[Hdot[5], -Hdot[18], -Hdot[6]],
           labels=['', 'Débit de chaleur', None],
           pathlengths=[0.45, 0.25, 0.883],
           orientations=[-1, 1, 0], prior=8, connect=(2, 0))

Ajoutez des étiquettes et la mise en forme

Nous allons ajouter des étiquettes aux patches du diagramme Sankey en utilisant l'attribut text de chaque patch. Nous allons également formater le texte pour qu'il soit en gras et augmenter la taille de la police.

diagrams = sankey.finish()
for diagram in diagrams:
    diagram.text.set_fontweight('bold')
    diagram.text.set_fontsize('10')
    for text in diagram.texts:
        text.set_fontsize('10')

Affichez le tracé

Enfin, nous allons afficher le diagramme Sankey en utilisant la méthode show du module pyplot.

plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à créer un diagramme Sankey à l'aide de la bibliothèque Matplotlib de Python. Nous avons utilisé la classe Sankey du module matplotlib.sankey pour créer le diagramme, et nous avons ajouté des étiquettes et une mise en forme au diagramme en utilisant l'attribut text de chaque patch. Les diagrammes Sankey sont un outil pratique pour visualiser le flux d'énergie ou de matériaux à travers un système complexe.