2013-10-10 152 views
2

我試圖讓圖例中的標籤左對齊並且值右對齊。在下面的代碼中,我嘗試過格式化方法,但是這些值沒有正確對齊。matplotlib中的圖例對齊

任何暗示/建議,非常感謝。

import matplotlib.pyplot as pl 

# make a square figure and axes 
pl.figure(1, figsize=(6,6)) 

labels = 'FrogsWithTail', 'FrogsWithoutTail', 'DogsWithTail', 'DogsWithoutTail' 
fracs = [12113,8937,45190, 10] 

explode=(0, 0.05, 0, 0) 
pl.pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True) 
pl.title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5}) 

legends = ['{:<10}-{:>8,d}'.format(labels[idx], fracs[idx]) for idx in range(len(labels))] 

pl.legend(legends, loc=1) 

pl.show() 

回答

3

您的實施有兩個問題。首先,你的圓形切片標籤比.format()分配給它們的字符數要長得多(最長爲16個字符,最多隻允許10個字符的空間)。爲了解決這個問題,改變legend行:

legends = ['{:<16}-{:>8,d}'.format(labels[idx], fracs[idx]) for idx in range(len(labels))] 
       ^-- change this character 

然而,這僅僅提高了輕微的事情。這是因爲matplotlib在默認情況下使用可變寬度字體,這意味着像m這樣的字符佔用比像i這樣的字符更多的空間。這是通過使用固定寬度的字體來解決的。

pl.legend(legends, loc=1, prop={'family': 'monospace'}) 

結果排隊很好,但等寬字體有稍微難看一些下行::在matplotlib,這是通過 enter image description here

+0

謝謝,這確實神奇。我確實爲標籤指定了更大的寬度,但最終粘貼了舊版本的代碼。設置'等寬'屬性做了這項工作。再次感謝@drs。 – neon