如何在轴刻度不同的多个Matplotlib绘图中同一位置添加文本?
解决Matplotlib自动在左上角添加文本的问题
完全可行,你可以利用Matplotlib的坐标变换功能,无需手动指定具体轴刻度值,就能让文本固定在绘图的左上角位置。下面是两种最常用的实现方式:
方法1:基于轴域的相对坐标(推荐)
这种方式让文本位置相对于坐标轴的比例固定,不管轴刻度范围怎么变化,文本都会始终处于轴的左上角区域。核心是给文本添加transform=ax.transAxes参数,其中x和y的取值范围为0到1(0对应轴的左/底部,1对应右/顶部)。
修改后的示例代码:
import matplotlib.pyplot as plt # 绘图1 fig, ax = plt.subplots() ax.plot([1, 2, 3, 4]) ax.set_ylabel('some numbers') # 添加左上角文本,x=0.02(距离左边缘2%),y=0.98(距离顶部2%) ax.text(0.02, 0.98, '自定义文本', fontsize=8, transform=ax.transAxes, verticalalignment='top', horizontalalignment='left') plt.show() # 绘图2 fig, ax = plt.subplots() ax.plot([2, 4, 6, 8]) ax.set_ylabel('some numbers') ax.text(0.02, 0.98, '自定义文本', fontsize=8, transform=ax.transAxes, verticalalignment='top', horizontalalignment='left') plt.show()
方法2:基于画布的绝对坐标
如果希望文本固定在整个画布的左上角(而非坐标轴的左上角),可以使用transform=fig.transFigure,此时x和y同样是0到1的比例值:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4]) ax.set_ylabel('some numbers') # 固定在画布左上角,x=0.05,y=0.95 fig.text(0.05, 0.95, '画布左上角文本', fontsize=8, verticalalignment='top', horizontalalignment='left') plt.show()
关键细节
verticalalignment='top'和horizontalalignment='left'确保文本的左上角对齐到指定坐标点,避免位置偏移。- 可以微调
x和y的数值(比如0.01到0.05之间),让文本位置更贴合需求。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

