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

如何修改matplotlib的x轴刻度显示,实现不同数值区间自定义格式化

解决方案

你可以通过matplotlib的FuncFormatter自定义刻度格式化规则,实现分区间的刻度展示需求。

完整可运行代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# 自定义刻度格式化函数
def format_x_tick(x, pos):
    # 0~0.09区间使用幂次格式
    if x < 0.1:
        # 格式化为科学计数法,去掉多余尾部0
        return f"{x:.0e}"
    # 0.1~20区间移除多余小数位
    else:
        # g格式自动去掉末尾的0和冗余小数点
        return f"{x:.10g}"

x = sorted([0.09, 20, 0.6, 6, 0.05, 0.5, 0.4, 4, 0.3, 3, 2, 0.1, 0.2,
            0.9, 0.8, 10, 0.7, 1, 0.08, 0.07, 0.06, 0.04, 0.03, 0.02, 0.01, 0.005])
y = list(np.arange(0.0, 2.6, 0.1))

plt.plot(x, y)
plt.xscale('log', base=10)
ax = plt.gca()
# 替换原ScalarFormatter为自定义格式化器
ax.xaxis.set_major_formatter(FuncFormatter(format_x_tick))
ax.set_xticks(x)
plt.xticks(fontsize=6)
plt.grid()
plt.show()

关键逻辑说明

  • 自定义格式化函数接收两个参数:x为刻度值,pos为刻度位置(本需求无需使用该参数)
  • 小于0.1的刻度值直接用科学计数法格式化,.0e表示保留0位小数的科学计数法,输出形如1e-2、5e-3
  • 大于等于0.1的刻度值使用.10g格式,会自动省略末尾的无效0和冗余小数点,满足0.10转0.1、2.00转2的需求

如果需要调整科学计数法的展示形式(比如改为10^-2上标格式),可以将格式化返回值调整为LaTeX格式,修改对应返回语句为:

return rf"$10^{{{int(np.log10(x))}}}$"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:09:02