2015-11-02 98 views
1

Sankey更改標籤的對齊方式在Matplotlib桑基圖表

我試圖使桑基功能Matplotlib對準它的標籤,這樣的圖是更具可讀性。

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="Example Systems") 
flows = [1, -.5, -.25,-.25] 
sankey = Sankey(ax=ax, unit=None) 
sankey.add(flows=flows, label='one', 
      labels=['1', 'horizontal allignment is currently set to center.', 'it would be nice if I could change it to justify right.', '4'], 
      pathlengths = [.5,.2,.5, .75], 
      orientations=[0, -1,-1, 0]) 

diagrams = sankey.finish() 
diagrams[-1].patch.set_hatch('/') 
plt.legend(loc='best') 
plt.show() 

在sankey.py代碼中,我發現那裏的水平對齊方式設置爲中心 公頃=中心

Github source

# Add the path labels. 
     texts = [] 
     for number, angle, label, location in zip(flows, angles, labels, 
                label_locations): 
      if label is None or angle is None: 
       label = '' 
      elif self.unit is not None: 
       quantity = self.format % abs(number) + self.unit 
       if label != '': 
        label += "\n" 
       label += quantity 
      texts.append(self.ax.text(x=location[0], y=location[1], 
             s=label, 
             ha='center', va='center')) 
     # Text objects are placed even they are empty (as long as the magnitude 
     # of the corresponding flow is larger than the tolerance) in case the 
     # user wants to provide labels later. 

是否有可能以某種方式獲取文本Sankey.py的排列方式與默認值不同?

回答

0

您可以使用finish()返回的對象設置文本的對齊方式。同意,人們可以爭辯添加選項來設置對齊add()

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[], title="Example Systems") 
flows = [1, -.5, -.25,-.25] 
sankey = Sankey(ax=ax, unit=None) 
sankey.add(flows=flows, label='one', 
      labels=['1', 'horizontal allignment is currently set to center.', 'it would be nice if I could change it to justify right.', '4'], 
      pathlengths = [.5,.2,.5, .75], 
      orientations=[0, -1,-1, 0]) 

diagrams = sankey.finish() 
diagrams[-1].patch.set_hatch('/') 
plt.legend(loc='best') 

for d in diagrams: 
    for t in d.texts: 
     t.set_horizontalalignment('left') 
plt.show() 

enter image description here