Text alignment in a Matplotlib legend

浪尽此生 提交于 2019-12-03 01:59:37

The backdoor you're looking for is the following:

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

I tried to get the example work, but I couldn't.

At least since matplotlib version 1.1.1 (maybe earlier) we need a dedicated renderer instance. Take care of your backend which defines the renderer. Depending on backend the output may look fine on screen but dismal as 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))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!