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

如何获取PyPlot图表中文本的位置及相关属性?

在Matplotlib中获取文本元素的位置及相关属性

Matplotlib里的标题、坐标轴标签等文本元素都属于Text对象,你可以先拿到这些对象,再通过对应的方法获取位置、尺寸、旋转等属性。

1. 获取目标文本对象

先通过对应属性拿到你需要的文本实例:

  • 坐标轴标题:ax.title(对应ax.set_title()设置的内容)
  • X轴标签:ax.xaxis.label(对应ax.set_xlabel())
  • Y轴标签:ax.yaxis.label(对应ax.set_ylabel())
  • 图级全局标题(fig.suptitle()设置的):fig._suptitle

2. 获取位置坐标

Text对象的get_position()方法会返回其自身坐标系下的(x, y)坐标。如果需要转换为像素坐标或其他坐标系(比如画布坐标系),可以结合变换方法处理:

import matplotlib.pyplot as plt
import numpy as np

x1 = np.linspace(0.0, 5.0, 100)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)

fig, ax = plt.subplots(figsize=(5, 3))
fig.subplots_adjust(bottom=0.15, left=0.2)
ax.plot(x1, y1)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Damped oscillation (V)')
ax.set_title('Oscillation')

# 获取文本对象
title_obj = ax.title
xlabel_obj = ax.xaxis.label
ylabel_obj = ax.yaxis.label

# 获取自身坐标系下的位置
title_pos = title_obj.get_position()
xlabel_pos = xlabel_obj.get_position()
ylabel_pos = ylabel_obj.get_position()

print(f"标题位置(axes坐标系):{title_pos}")
print(f"X轴标签位置(axes坐标系):{xlabel_pos}")
print(f"Y轴标签位置(axes坐标系):{ylabel_pos}")

# 转换为像素坐标(需先渲染画布)
fig.canvas.draw()
title_pixel_pos = title_obj.get_transform().transform(title_pos)
print(f"标题位置(像素):{title_pixel_pos}")

3. 获取其他相关属性

  • 文本尺寸:用get_window_extent()获取文本的边界框(Bbox对象),从中提取宽高:
    fig.canvas.draw()
    title_bbox = title_obj.get_window_extent()
    print(f"标题宽高(像素):{title_bbox.width}, {title_bbox.height}")
    
  • 旋转角度:get_rotation()返回文本的旋转角度:
    print(f"Y轴标签旋转角度:{ylabel_obj.get_rotation()}")
    
  • 字体大小:get_fontsize()直接获取字体大小:
    print(f"标题字体大小:{title_obj.get_fontsize()}")
    
  • 缩放相关:文本的缩放效果可以通过字体大小间接体现,若有额外变换,可通过get_transform()查看变换矩阵。

注意:如果要获取准确的窗口范围、像素坐标等属性,必须先调用fig.canvas.draw()完成画布渲染,否则部分属性值可能不准确。

内容的提问来源于stack exchange,提问作者PodHunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:12:14