You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib并排子图添加自动换行标题的问题与解决方案

解决Matplotlib子图标题自动换行问题

你用ax.text()设置wrap=True未生效的核心原因是:当使用transAxes坐标转换时,Matplotlib无法自动识别文本的可用宽度,需要手动限定范围;或者你可以改用更适配场景的set_title()方法来实现自动换行。

方案一:使用set_title()(推荐)

这是最直接的方式,set_title()默认会将标题宽度限制在子图轴的范围内,搭配wrap=True即可自动换行:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(nrows=1, ncols=2)

axs[0].plot([1.0, 1.2, 0.9])
long_title = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum."""
# 设置标题并开启自动换行
axs[0].set_title(long_title, wrap=True)

# 第二个子图示例
axs[1].plot([0.8, 1.1, 1.3])
axs[1].set_title("测试长标题自动换行:这里输入足够多的文字来验证换行是否正常生效", wrap=True)

plt.tight_layout()
plt.show()

方案二:保留ax.text()并指定宽度

如果必须使用ax.text(),需要通过bbox参数明确文本的可用宽度(对应子图轴的范围),让Matplotlib知道在哪里换行:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(nrows=1, ncols=2)

axs[0].plot([1.0, 1.2, 0.9])
long_text = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum."""
axs[0].text(
    0.5,  # 水平居中
    -0.2,  # 位置调整到轴下方
    long_text,
    transform=axs[0].transAxes,
    wrap=True,
    ha='center',  # 水平居中对齐
    # 指定bbox宽度为子图轴的范围(transAxes下width=1对应整个轴宽度)
    bbox=dict(boxstyle='square,pad=0', fc='white', ec='none', width=1, transform=axs[0].transAxes)
)

plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:31:07