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

Matplotlib:将X轴移至y=0处并保留刻度标签在底部

实现X轴线移至y=0且刻度标签保留在底部

需求要点:

  • 将X轴线(包含所有对应刻度)移动到y=0的位置
  • 刻度标签仍保留在图表底部,避免图形杂乱
  • 需保留轴的完整功能(如网格、对数刻度支持),因此不采用ax.axhline(y=0)这类替代方案

修正后的代码实现

from matplotlib import pyplot as plt
import matplotlib.transforms as transforms
import numpy as np

# 生成示例数据
x = np.linspace(-10, 10, 100)
y = np.sin(x)

# 创建绘图对象
fig, ax = plt.subplots()
# 绘制曲线
ax.plot(x, y)

# 将X轴的轴线移到y=0的位置
ax.spines['bottom'].set_position(('data', 0))
# 隐藏顶部和右侧的轴线(可选,优化图表简洁度)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# 单独处理X轴刻度标签:让刻度线在y=0位置,标签固定在底部
# 混合变换:刻度标签x坐标跟随数据位置,y坐标固定在图表底部的轴坐标系位置
label_trans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
for label in ax.get_xticklabels():
    label.set_transform(label_trans)
    label.set_y(0)  # 固定在轴坐标系的底部位置

# 确保刻度线保持在y=0的数据位置
for tick in ax.get_xticklines():
    tick.set_transform(ax.transData)

plt.show()

关键逻辑说明

  1. ax.spines['bottom'].set_position(('data', 0)):直接将X轴线(spine)定位到y=0的数据位置
  2. 混合变换blended_transform_factory:分离刻度标签的x、y坐标变换规则,既保证标签对应正确的数据x值,又固定在图表底部
  3. 单独设置刻度线的变换规则:确保刻度线始终出现在y=0的位置,和轴线对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:54:53