我正在尝试右对齐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
答案 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))