2014-10-31 3 views
3

Я использую matplotlibs sankey Функциональность и проблема с подключением двух потоков. В принципе, я просто хочу подключить поток Qab,rekup до конца потока Qzu,rekup (см. Скриншот).Подключение потоков в диаграмме matplotlib sankey

Кажется, это довольно легко, но я до сих пор не понял, как это можно сделать.

Вот скриншот: https://www.dropbox.com/s/2satz9ryniy958v/Sankey.png?dl=0 enter image description here Вот код:

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

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], 
        title="Vereinfachtes Kraftwerksmodell") 
sankey = Sankey(ax=ax, unit=None) 
sankey.add(flows=[1.0, -0.3, -0.1, -0.1, -0.5], 
      labels=['P$el$', 'Q$ab,vd$', 'P$vl,vd$', 'P$vl,mot$', ''], 
      label='Laden', 
      orientations=[0, -1, 1, 1, 0]) 
sankey.add(flows=[0.5, 0.1, 0.1, -0.1, -0.1, -0.1, -0.1, -0.3], fc='#37c959', 
      label='Entladen', 
      labels=['P$mech$', 'Q$zu,ex$', 'Q$zu,rekup$', 'P$vl,tb$', 'P$vl,gen$',   'Q$ab,tb$', 'Q$ab,rekup$', 'P$nutz$'], 
      orientations=[0, -1, -1, 1, 1, -1, -1, 0], prior=0, connect=(4, 0)) 
sankey.add(flows=[-0.1, 0.1], 
      label='Rekuperator', 
      #labels=['bla'], 
      orientations=[1,1], prior=1, connect=(2, 0)) 
diagrams = sankey.finish() 
diagrams[-1].patch.set_hatch('/') 
plt.legend(loc='lower right') 
plt.show() 

Кто-нибудь есть идеи?

Заранее спасибо шнура

ответ

3

Я думаю, что я слишком поздно, но вот решение: Вы должны указать длины пути для первого узла и настроить это вручную, чтобы совпасть меньше один.

http://i.imgur.com/kAh1isL.png

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], 
       title="Vereinfachtes Kraftwerksmodell") 
sankey = Sankey(ax=ax, unit=None) 
sankey.add(flows=[1.0, -0.3, -0.1, -0.1, -0.5], 
     pathlengths = [0.5,0.06,0.5,0.5,0.375], 
     labels=['P$el$', 'Q$ab,vd$', 'P$vl,vd$', 'P$vl,mot$', ''], 
     label='Laden', 
     orientations=[0, -1, 1, 1, 0]) 
sankey.add(flows=[0.5, 0.1, 0.1, -0.1, -0.1, -0.1, -0.1, -0.3], fc='#37c959', 
     label='Entladen', 
     labels=['P$mech$', 'Q$zu,ex$', 'Q$zu,rekup$', 'P$vl,tb$', 'P$vl,gen$',    'Q$ab,tb$', 'Q$ab,rekup$', 'P$nutz$'], 
     orientations=[0, -1, -1, 1, 1, -1, -1, 0], prior=0, connect=(4, 0)) 
sankey.add(flows=[-0.1, 0.1], 
     label='Rekuperator', 
     #labels=['bla'], 
     orientations=[1,1], prior=1, connect=(2, 0)) 
diagrams = sankey.finish() 
diagrams[-1].patch.set_hatch('/') 
plt.legend(loc='lower right') 
plt.show() 
1

Я тоже до смешного поздний, но есть гораздо более простой способ сделать это, чем беспокоиться о длине пути.

Когда вы запускаете путь назад, значения ориентации меняются на противоположные, поэтому -1 вверх и 1 вниз.

исправить код все, что вам нужно сделать, это изменить код рекуператор Санки для:

sankey.add(flows=[-0.1, 0.1], 
     label='Rekuperator', 
     #labels=['bla'], 
     orientations=[-1,-1], prior=1, connect=(2, 0)) 

Producing this diagram

+0

Для тех, кто пытается что-то вроде этого, это намного проще, чем принято отвечать –