2014-10-31 89 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向下。

修復您的代碼,所有你需要做的是Rekuperator桑基代碼更改爲:

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

Producing this diagram

+0

對於任何試圖這樣的事情,這比接受的答案更容易 – 2017-11-15 08:18:33