Sankey Diagramm automatisch schließen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Axel_S
User
Beiträge: 1
Registriert: Freitag 9. Februar 2018, 08:19

Freitag 25. Mai 2018, 09:39

Hallo,

ich habe eine Frage zu Sankey Diagrammen. Unten findet ihr ein Minimalbeispiel. Ich möchte Daten aus einer Exceltabelle einlesen und als Eingabe im Sankey-Diagramm verwenden. Das funktioniert auch.
Über die Eingabe der pathlengths kann ich mir das Diagramm dann auch so hinfummeln, dass es ein geschlossener Kreis wird. Ändern sich die Eingabewerte aber wieder etwas, passt das ganze nicht mehr. Da ich für den ersten flow (meines Wissens nach) kein connect angeben, kann habe ich somit nur zwei definierte Kontaktstellen für drei existierende.

Gibt es eine Möglichkeit auch für unterschiedliche Eingaben (ich habe mal zwei Varianten eingefügt) immer einen geschlossenen Kreis zu erhalten?

Danke und Gruß,
Axel

Code: Alles auswählen

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

#import pandas as pd
#df = pd.read_excel('excel_engineering.xlsx', sheet_name = 'Kreislauf', header = None)
#P_WU  = round(df.loc[8,5],2)/round(df.loc[8,5],2)
#WU_H  = round(df.loc[20,8])/round(df.loc[8,5],2)
#H_P   = round(df.loc[19,3])/round(df.loc[8,5],2)
#q_in  = round(df.loc[25,5])/round(df.loc[8,5],2)
#q_out = round(df.loc[12,11])/round(df.loc[8,5],2)

#Variante 1
P_WU  = 1
WU_H  = 0.8
H_P   = 1
q_in  = 0.2
q_out = 0.2

#Variante 2
P_WU  = 1
WU_H  = 0.6
H_P   = 1
q_in  = 0.4
q_out = 0.4

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Einfach thermisch")
sankey = Sankey(ax=ax, unit=None)
sankey.add(patchlabel = '1',
		   flows=[P_WU, -P_WU],
		   labels=[None, None],
		   #pathlengths=1,
		   #pathlengths=[1.2, 1],
		   orientations=[-1, -1])
sankey.add(flows=[P_WU,-WU_H,-q_out],
		   labels=[None, None, 'soso'],
		   #pathlengths=1,
		   #pathlengths=[1, 1, 1],
		   orientations=[0, -1,0], prior = 0, connect=(1, 0))
sankey.add(flows=[WU_H,q_in,-P_WU],
		   labels=[None, 'soso', None],
		   #pathlengths=1,
		   #pathlengths=[1, 1, 0.55],
		   orientations=[0, 1,-1], prior = 0, connect=(0, 2))

diagrams = sankey.finish()
plt.show()
Antworten