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

如何在Matplotlib中手动将X轴刻度固定在轴的首尾与中间?

让Matplotlib X轴刻度固定在首尾和中间位置的方法

要实现把指定数值固定在X轴的起始、中间、末尾位置,你需要将刻度的显示位置和刻度标签分开设置——Matplotlib默认会根据数据值的大小排布刻度,所以得手动指定刻度在轴上的物理位置,再对应上你想要的数值标签。

修改后的代码如下:

import matplotlib.pyplot as plt
from matplotlib.ticker import FixedLocator, FixedFormatter

def box(ax_position, percentile_values, label, label_position):
    fig = plt.figure(figsize=(10, 2))
    ax1 = fig.add_axes(ax_position)
    
    # 关键:将X轴显示范围固定为0-1,用0、0.5、1代表轴的左、中、右位置
    ax1.set_xlim(0, 1)
    # 强制刻度在轴的0(左端)、0.5(中间)、1(右端)位置显示
    ax1.xaxis.set_major_locator(FixedLocator([0, 0.5, 1]))
    # 给这三个位置绑定你需要的数值标签
    ax1.xaxis.set_major_formatter(FixedFormatter(percentile_values))
    
    ax1.tick_params(axis="x", direction="out", pad=-15, colors='b')
    ax1.set_yticks([])
    # 用transAxes参数让text坐标基于轴的相对位置计算,避免偏移
    ax1.text(*label_position, label, size=8, transform=ax1.transAxes)
    plt.show()

box((0.4, 0.5, 0.4, 0.1), (25,80,95),  "CA",(0.01, 1.3))

核心逻辑说明

  • set_xlim(0,1):把X轴的显示范围锁定为0到1,这样我们可以用0、0.5、1精准对应轴的左、中、右端点。
  • FixedLocator([0,0.5,1]):强制Matplotlib仅在这三个物理位置绘制刻度,不受数据值大小影响。
  • FixedFormatter(percentile_values):将这三个位置的刻度标签替换为你传入的25、80、95,实现"数值固定在指定轴位置"的效果。
  • 额外调整ax1.text的transform参数:让标签坐标基于轴的相对比例计算,避免因轴范围变化导致标签位置偏移。

你之前用set_xticks(percentile_values)的问题在于,这是告诉Matplotlib在数据值等于25、80、95的位置绘制刻度,而Matplotlib会自动调整轴范围来适配这些数值,所以刻度位置是按数值比例排布的,而非固定在轴的首尾和中间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:25:21