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

如何为matplotlib.pyplot.text()设置x、y轴不同坐标系?

实现x轴数据坐标、y轴轴坐标的文本定位

当然有超简便的实现方式!你要的这种混合坐标系需求,matplotlib早就为我们准备好了专门的工具——matplotlib.transforms.blended_transform_factory(),用它可以轻松组合两种不同的坐标系,完美解决你说的“垂直位置固定,水平位置随数据视图调整”的问题。

核心思路

matplotlib的坐标系变换支持拆分x和y轴分别设置:

  • 用ax.transData作为x轴变换:让文本的水平位置完全跟随数据坐标系,当你调整x轴显示范围时,文本会自动跟着移动到对应数据位置
  • 用ax.transAxes作为y轴变换:让文本的垂直位置基于轴的相对位置(0对应轴底部,1对应轴顶部),不管y轴范围怎么调整,文本都固定在你设定的垂直位置

完整代码示例

import matplotlib.pyplot as plt
from matplotlib.transforms import blended_transform_factory

# 生成示例数据
x_values = [1, 3, 5, 7, 9]
y_values = [4, 2, 5, 1, 3]

# 创建绘图对象
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x_values, y_values, marker='o', label='示例数据')

# 创建混合变换:x用数据坐标,y用轴坐标
blended_trans = blended_transform_factory(
    ax.transData,  # x轴:数据坐标系
    ax.transAxes   # y轴:轴坐标系
)

# 添加文本:x是数据值,y是轴的相对位置(这里0.8代表距离顶部20%的位置)
ax.text(
    x=5,  # 数据坐标系下的x位置
    y=0.8,  # 轴坐标系下的y位置(0-1)
    s='垂直固定,水平随数据移动',
    transform=blended_trans,
    ha='center',  # 水平居中对齐
    va='center',  # 垂直居中对齐
    bbox=dict(facecolor='lightblue', alpha=0.6, pad=5)  # 添加背景框增强可读性
)

# 测试调整x轴范围,验证文本位置变化
ax.set_xlim(0, 10)
ax.legend()
plt.show()

效果验证

当你拖动调整x轴的显示范围(比如缩小或放大x轴),你会发现文本的水平位置始终对应数据中的x=5的位置,而垂直位置一直保持在轴的80%高度处,完全符合你的需求!

这个技巧我平时做可视化时经常用到,比如给时序图添加固定在侧边的标注,或者给散点图添加随数据点水平移动但垂直固定的说明,非常实用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:32:56