matplotlib:图例标题的对齐方式

Erw*_*411 20 matplotlib

在matplotlib中,如何调整图例标题的对齐方式?它总是居中,但我需要它与图例框保持对齐.我试图更改标题的文本艺术家的对齐方式,但没有任何效果.有关详细信息,请参阅以下示例

from pylab import *

x = linspace(0, 1)
plot(x, x, label="1")
plot(x, x**2, label="2")
plot(x, x**3, label="3")
plot(x, sqrt(x), label="square root")

l = legend(title="Title", loc="best")
l.get_title().set_ha("left")               # <== does not work

show()
Run Code Online (Sandbox Code Playgroud)

问题归结为什么和谁控制标题对齐的锚点?将对齐更改为"右"或"中心"具有明显的效果.第二个观察:对于长标题字符串,锚点移动到图例框的左边界...

Imp*_*est 12

您可以对齐完整的图例框设置leg._legend_box.align.这会对齐图例框内的所有内容,但效果是在框的两侧而不是中心处具有标题的效果.


Yan*_*ann 6

我认为您需要Text使用该set_position((x, y))方法替换对象.单位为xy像素,因此您必须尝试使用​​正确的值,或使用Transform.我不确定哪种组合Transforms可能最有用.

简而言之,这样的事情可能有用:

l.get_title().set_position((-10, 0)) # -10 is a guess
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!set_position()确实移动了标题.但是,我不想硬连接位移,而是从盒子区域计算它.这似乎变得非常复杂...... (4认同)

小智 6

从 matplotlib 3.6 版本开始,就有了这个alignment参数。在文档中您可以阅读:

对齐方式{'center', 'left', 'right'}, 默认: 'center'

图例标题和条目框的对齐方式。> 条目作为一个块对齐,以便标记始终对齐。

您现在只需致电

plt.legend(title='Title', alignment='left')
Run Code Online (Sandbox Code Playgroud)