Matplotlib:如何精确对齐标题和y轴标签?

7
在Matplotlib中,我可以使用以下命令轻松将标题左对齐:
ax.set_title(f"Title", ha='left', x=-0)

我得到:

标题靠左对齐

但有时我想把标题对齐到左侧标签的位置,得到像这样的东西:

标题对齐到左侧标签

我通常通过试错来完成。最终我会得到任意的x偏移量,例如:

ax.set_title(f"Title", ha='left', x=-.12)

我如何自动计算这个-.12的偏移量?

1个回答

6
使用转换(参见转换教程),您可以找到标签边界框左侧位置的坐标,并将其转换为轴坐标系,然后传递给set_title()函数。
fig, ax = plt.subplots()
fig.canvas.draw()
bbox = ax.get_yticklabels()[-1].get_window_extent()
x,_ = ax.transAxes.inverted().transform([bbox.x0, bbox.y0])
ax.set_title('A title aligned with the y-axis labels', ha='left', x=x)

enter image description here


这是一个很好的答案。例子能够正常工作,但我在使用它时遇到了麻烦。这个例子无法正确地绘制标题:ax = sns.load_dataset('iris').plot.line();bbox = ax.get_yticklabels()[0].get_window_extent();x, _ = ax.transAxes.inverted().transform([bbox.x0, bbox.y0]);ax.set_title("My test", x=x, ha='left') - neves
1
很奇怪,我的图形在笔记本上显示了,但是只有在包含fig.canvas.draw()这行代码后,上面的代码才能正常工作。我不明白。 - neves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接