Matplotlib图例中的文本对齐方式

时间:2011-10-29 00:00:46

标签: python matplotlib legend

我正在尝试右对齐matplotlib轴图例中的条目(默认情况下它们是左对齐的),但似乎无法找到任何方法。我的设置如下:

(我已使用ax.plot()命令向my_fig轴添加数据和标签)

ax = my_fig.get_axes()[0]
legend_font = FontProperties(size=10)
ax.legend(prop=legend_font, num_points=1, markerscale=0.5)

matplotlib Axes的文档中有一个图例关键字参数列表,但似乎没有任何直接的方法来设置图例条目的对齐方式。有人知道这样做的后门方式吗?感谢。

编辑:

为了澄清我想要实现的目标,现在我的传奇看起来像:

Maneuver: 12-OCT-2011 12:00 UTC 

Bias: 14-OCT-2011 06:00 UTC

我希望它看起来像:

Maneuver: 12-OCT-2011 12:00 UTC 

    Bias: 14-OCT-2011 06:00 UTC

2 个答案:

答案 0 :(得分:19)

您正在寻找的后门如下:

# get the width of your widest label, since every label will need 
# to shift by this amount after we align to the right
shift = max([t.get_window_extent().width for t in legend.get_texts()])
for t in legend.get_texts():
    t.set_ha('right') # ha is alias for horizontalalignment
    t.set_position((shift,0))

答案 1 :(得分:9)

我试图让示例工作,但我做不到。

至少从matplotlib版本1.1.1(可能更早)开始,我们需要一个专用的渲染器实例。 请注意定义渲染器的后端。根据后端,输出可能在屏幕上看起来很好,但是像PDF一样令人沮丧。

# get the width of your widest label, since every label will need 
#to shift by this amount after we align to the right
renderer = figure.canvas.get_renderer()
shift = max([t.get_window_extent(renderer).width for t in legend.get_texts()])
for t in legend.get_texts():
    t.set_ha('right') # ha is alias for horizontalalignment
    t.set_position((shift,0))