matplotlib中的图例对齐方式

时间:2013-10-10 23:25:16

标签: matplotlib legend

我正试图让左对齐的标签和值在图例中右对齐。在下面的代码中,我尝试过使用format方法,但值没有正确对齐。

非常感谢任何提示/建议。

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()

1 个答案:

答案 0 :(得分:4)

您的实施存在两个问题。首先,您的饼图切片标签比使用.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 这样的字符占用更多空间。这是通过使用固定宽度字体来解决的。在matplotlib中,这是通过以下方式实现的:

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

结果排成一行很好,但是monospace字体的缺点是对某些人略显丑陋: enter image description here