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

Matplotlib设置图表下方文本(负坐标)不显示问题求助

问题:Matplotlib图表下方添加文本无法显示

我原本通过以下代码在Matplotlib图表内添加文本:

fg_ax.text(
    0.05,
    0.1,
    f"n = {len(df)}",
)

其中fg_ax为matplotlib.axes.Axes对象。

我希望将文本放在图表下方,由于y轴数据范围是0到1,查阅文档后尝试将y坐标设为-0.5:

fg_ax.text(
    0.05,
    -0.5,
    f"n = {len(df)}",
)

但文本完全不显示,像是超出了显示区域。无论使用plt.show()预览还是fg_ax.figure.savefig()保存,都无法看到该文本。

最小可复现代码:

import numpy as np
import matplotlib.pyplot as plt


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N)) ** 2  # 0到15点半径

_, fg_ax = plt.subplots()
fg_ax.scatter(x, y, s=area, c=colors, alpha=0.5)
fg_ax.text(
    0.05,
    -0.5,
    f"n = qsdfqsdf",
)
plt.show()

解决方法

方法1:手动扩大y轴显示范围

默认情况下Matplotlib会自动适配数据调整坐标轴范围,y轴范围会被限制在0到1左右,导致y=-0.5的位置处于显示区域外。可以手动设置y轴下限,让文本区域可见:

# 在添加文本后设置y轴范围,确保文本在显示区内
fg_ax.set_ylim(-0.6, 1.1)

方法2:使用轴坐标定位文本

ax.text()默认使用数据坐标(和图表数据范围绑定),如果想让文本位置相对于坐标轴固定,改用轴坐标(取值0-1,0代表轴底部,1代表轴顶部),需要指定transform=fg_ax.transAxes:

fg_ax.text(
    0.05,  # 距离轴左侧5%的位置
    -0.15, # 距离轴底部下方15%的位置(负数表示在轴外)
    f"n = {len(df)}",
    transform=fg_ax.transAxes
)

此时需要调整图表底部边距,避免文本被截断:

plt.subplots_adjust(bottom=0.2)  # 增大底部边距,留出文本空间

方法3:直接在画布上添加文本

使用plt.figtext()可以基于整个画布的坐标(左下角为(0,0),右上角为(1,1))放置文本,无需调整坐标轴:

plt.figtext(0.1, 0.05, f"n = {len(df)}")

内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:15:41