Matplotlib:log2基底色条出现异常次要刻度的问题咨询
解决tricontourf对数色条次要刻度问题
先搞清楚那些次要刻度是什么
你看到的次要刻度是LogFormatter默认生成的中间对数刻度——因为你用了以2为底的对数格式化,它会自动在你设定的主刻度(也就是bounds里的2-1、21、23...)之间,插入比如20、22、24这类中间值的刻度,用来填充对数刻度的间隔,但因为你的主刻度间隔已经是2个指数级,这些次要刻度就显得多余又杂乱。
两种方法去除这些次要刻度
方法1:修改LogFormatter参数,直接禁用次要刻度
LogFormatter的minor_thresholds参数用来控制何时显示次要刻度,把它设为(np.inf, np.inf)就能完全关闭次要刻度的生成:
import numpy as np import matplotlib.pyplot as plt import matplotlib.tri as tri import matplotlib.ticker as ticker import matplotlib.colors as colors section = 'T7' data = np.loadtxt( section + '_values.dat') x = data[:,0] y = data[:,1] z = data[:,2] triang = tri.Triangulation(x,y) fig1, ax1 = plt.subplots() ax1.set_aspect('equal') # 保留你的边界设置 bounds = [2.**-1,2.**1,2**3,2**5,2**7,2**9] # 注意:LogNorm默认基底是10,这里要和Formatter统一为2 norm = colors.LogNorm(base=2) # 设置参数禁用次要刻度 formatter = ticker.LogFormatter(base=2, minor_thresholds=(np.inf, np.inf)) tcf = ax1.tricontourf(triang, z, levels = bounds, cmap='hot_r', norm = norm ) cbar = fig1.colorbar(tcf, format=formatter) plt.show()
方法2:手动关闭色条的次要刻度
如果你不想修改Formatter,也可以在创建色条后直接调用方法关闭次要刻度:
# ...前面代码和你原有代码一致... cbar = fig1.colorbar(tcf, format=formatter) # 手动关闭次要刻度 cbar.minorticks_off() plt.show()
额外提示:统一对数基底
你原来的代码里LogNorm用的是默认的base=10,但LogFormatter用的是base=2,两者不统一可能导致潜在的刻度匹配问题,建议给LogNorm也加上base=2参数,让整个对数缩放逻辑保持一致。
内容的提问来源于stack exchange,提问作者user2078621
相关产品推荐
相关产品推荐

