matplotlib:图例标题对齐

lokaqttq  于 2023-03-30  发布在  其他
关注(0)|答案(3)|浏览(173)

在matplotlib中,如何调整 legend title 的对齐方式?它总是居中的,但我需要它与legend box左对齐。我尝试更改标题的Text artist的对齐方式,但没有效果。详细信息请参见以下示例:

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

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

l7mqbcuq

l7mqbcuq1#

您可以对齐完整的图例框设置leg._legend_box.align。这将对齐图例框内的所有内容,但效果是希望标题位于框的两侧而不是中心。

*左对齐

leg = plt.legend(title="Title")
leg._legend_box.align = "left"

*右对齐

leg = plt.legend(title="Title")
leg._legend_box.align = "right"

mm9b1k5b

mm9b1k5b2#

我认为你需要使用set_position((x, y))方法来替换Text对象。xy的单位是像素,所以你必须试验什么值看起来合适,或者使用Transform。我不确定Transforms的哪种组合可能最有用。
简而言之,这样的东西可能会起作用:

l.get_title().set_position((-10, 0)) # -10 is a guess
9q78igpj

9q78igpj3#

从matplotlib 3.6版本开始,有alignment参数。在documentation中,你可以读到:
对齐'center ',' left','right'},默认值:'中心'
图例标题和条目框的对齐方式。条目作为一个块〉对齐,以便标记始终对齐。
您现在只需调用

plt.legend(title='Title', alignment='left')

相关问题