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

如何在Matplotlib对数纵轴中仅保留一次相同指数?

解决Matplotlib对数纵轴重复显示10^1的问题

原代码的问题出在自定义刻度格式化函数的判断逻辑上——它依赖刻度的位置索引(pos)来决定是否显示完整指数格式,这会导致同一指数区间内的多个刻度被错误地加上指数标识。我们需要调整逻辑,仅在刻度值为10的整数次幂时显示完整指数格式,其他同指数区间的刻度只显示数字。

修改后的代码如下:

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

# 生成数据
x = np.linspace(start=11, stop=19, num=20)
y = x

# 创建画布和坐标轴
fig, ax = plt.subplots()

# 绘图并设置纵轴为对数刻度
ax.plot(x, y)
ax.set_yscale('log')

# 定义纵轴刻度的自定义格式化函数
def format_y_tick(value, pos):
    exponent = int(np.log10(value))
    base = value / 10**exponent
    # 仅当base为1(即当前值是10的整数次幂)时,显示完整指数格式
    if np.isclose(base, 1):
        # 用LaTeX格式显示10^exponent,更美观
        return f'$10^{{{exponent}}}$'
    else:
        # 其他情况只显示base的整数部分
        return f'{int(base)}'

ax.yaxis.set_major_formatter(FuncFormatter(format_y_tick))

# 显示图表
plt.show()

关键修改点:

  • 移除了原代码中基于pos的判断逻辑,改为通过np.isclose(base, 1)判断当前刻度是否是10的整数次幂(避免浮点数精度问题)
  • 对10的整数次幂刻度,使用LaTeX格式$10^{{{exponent}}}$显示,比1eX更符合对数刻度的常规视觉习惯
  • 非10次幂的刻度仅显示数字部分,避免重复的指数标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:36