Erstellen eines Sankey-Diagramms

PythonPythonBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Tutorial lernen wir, wie man mithilfe der Matplotlib-Bibliothek in Python einen Sankey-Diagramm erstellt. Sankey-Diagramme sind ein Typ von Flussdiagrammen, die üblicherweise zur Visualisierung des Energie- oder Materialflusses durch ein System verwendet werden. Sie eignen sich besonders gut zur Analyse komplexer Systeme mit mehreren Eingängen und Ausgängen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der für die Erstellung von Sankey-Diagrammen mit Matplotlib erforderlichen Bibliotheken. Wir importieren die Sankey-Klasse aus dem matplotlib.sankey-Modul und das pyplot-Modul aus Matplotlib.

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

Definieren der Daten

Als nächstes definieren wir die Daten, die wir mit dem Sankey-Diagramm visualisieren möchten. In diesem Beispiel verwenden wir die Daten aus Beispiel 8.6 aus Morans und Shapiro's "Fundamentals of Engineering Thermodynamics". Die Daten repräsentieren den Energiefluss durch einen Rankine-Kraftzyklus. Wir definieren die Energieflüsse als Liste von Werten.

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

Erstellen der Figur und der Achsen

Wir werden ein Figurenobjekt erstellen und einer einzigen Achsenmenge hinzufügen. Wir werden auch den Titel der Grafik festlegen.

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")

Erstellen des Sankey-Diagramms

Wir werden eine Instanz der Sankey-Klasse erstellen und das Achsenobjekt übergeben, das wir in Schritt 3 erstellt haben. Wir werden auch das Format der Flusswerte und die Maßeinheit festlegen. Anschließend fügen wir die Ströme zum Diagramm hinzu, indem wir die add-Methode verwenden. Wir geben die Farbe jedes Stroms über den facecolor-Parameter und die Beschriftungen für jeden Strom über den labels-Parameter an. Wir geben auch die Pfadlängen für jeden Strom über den pathlengths-Parameter und die Orientierung jedes Stroms über den orientations-Parameter an. Schließlich verbinden wir die Ströme über den connect-Parameter.

sankey = Sankey(ax=ax, format='%.3G', unit=' MW', gap=0.5, scale=1.0/Hdot[0])
sankey.add(patchlabel='\n\nPumpe 1', rotation=90, facecolor='#37c959',
           flows=[Hdot[13], Hdot[6], -Hdot[7]],
           labels=['Wellenleistung', '', None],
           pathlengths=[0.4, 0.883, 0.25],
           orientations=[1, -1, 0])
sankey.add(patchlabel='\n\nOffener\nWärmetauscher', 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\nPumpe 2', facecolor='#37c959',
           flows=[Hdot[14], Hdot[8], -Hdot[9]],
           labels=['Wellenleistung', '', None],
           pathlengths=[0.4, 0.25, 0.25],
           orientations=[1, 0, 0], prior=1, connect=(3, 1))
sankey.add(patchlabel='Geschlossener\nWärmetauscher', 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='Entlüfter', 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='Dampferzeuger', facecolor='#ff5555',
           flows=[Hdot[15], Hdot[10], Hdot[2], -Hdot[3], -Hdot[0]],
           labels=['Wärmeerzeugungsrate', '', '', 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\nNachheizung', 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, 'Wellenleistung', None, '', 'Wellenleistung'],
           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='Kondensator', facecolor='#58b1fa', trunklength=1.764,
           flows=[Hdot[5], -Hdot[18], -Hdot[6]],
           labels=['', 'Wärmeerzeugungsrate', None],
           pathlengths=[0.45, 0.25, 0.883],
           orientations=[-1, 1, 0], prior=8, connect=(2, 0))

Hinzufügen von Beschriftungen und Formatierung

Wir werden Beschriftungen zu den Patches im Sankey-Diagramm hinzufügen, indem wir das text-Attribut jedes Patches verwenden. Wir werden auch den Text formatieren, um fett zu machen und die Schriftgröße zu erhöhen.

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')

Zeige das Diagramm an

Schließlich werden wir das Sankey-Diagramm mit der show-Methode des pyplot-Moduls anzeigen.

plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man ein Sankey-Diagramm mit der Matplotlib-Bibliothek in Python erstellt. Wir haben die Sankey-Klasse aus dem matplotlib.sankey-Modul verwendet, um das Diagramm zu erstellen, und wir haben Beschriftungen und Formatierung zum Diagramm hinzugefügt, indem wir das text-Attribut jedes Patches verwendet haben. Sankey-Diagramme sind ein nützliches Werkzeug, um den Energie- oder Stofffluss durch ein komplexes System zu visualisieren.