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

Matplotlib双对数图出现重复刻度问题求助

Matplotlib双对数图自定义刻度后残留默认刻度的问题解决

这不是Matplotlib的Bug,问题出在双对数图默认会显示次要刻度(minor ticks)——你用xticks()只替换了主刻度,那些残留的3×10²、4×10²其实是次要刻度的标签。

解决方案

要彻底解决这个问题,需要处理次要刻度,以下是两种常用方法:

方法1:全局关闭次要刻度

在设置完自定义刻度后,调用plt.minorticks_off()就能关闭所有坐标轴的次要刻度:

import matplotlib.pyplot as plt

P = [224, 448, 896, 1792]
T = [4200, 2300, 1300, 1000]

plt.loglog(P, T, '.-', ms=10)

# 设置x轴自定义刻度
pstr = [f"{p:d}" for p in P]
plt.xticks(P, pstr)

# 设置y轴自定义刻度
ytick = [1000, 2000, 3000, 4000]
pstr = [f"{pt:d}" for pt in ytick]
plt.yticks(ytick, pstr)

# 关闭所有次要刻度
plt.minorticks_off()

plt.show()

方法2:单独控制单轴的次要刻度

如果只想关闭某一个轴的次要刻度,可以通过坐标轴对象精准控制:

import matplotlib.pyplot as plt

P = [224, 448, 896, 1792]
T = [4200, 2300, 1300, 1000]

plt.loglog(P, T, '.-', ms=10)

# 设置自定义刻度
pstr = [f"{p:d}" for p in P]
plt.xticks(P, pstr)
ytick = [1000, 2000, 3000, 4000]
pstr = [f"{pt:d}" for pt in ytick]
plt.yticks(ytick, pstr)

# 获取当前坐标轴对象,单独关闭x轴次要刻度
ax = plt.gca()
ax.xaxis.set_minor_locator(plt.NullLocator())

plt.show()

补充说明

你提到本次示例中y轴显示正常,是因为自定义的y刻度刚好和默认主刻度位置(1000、2000等)重合,次要刻度被覆盖所以没显现。但在其他场景下,如果自定义y刻度和默认主刻度位置不重叠,同样会出现次要刻度残留的问题,所以统一处理次要刻度是更稳妥的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:13:00