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
相关产品推荐
相关产品推荐

