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
相关产品推荐
相关产品推荐

