Python matplotlib添加自定义level后colorbar刻度位置异常如何解决
问题原因
matplotlib的colorbar针对contour、contourf输出的结果,默认采用等宽分段展示规则:不管你自定义的levels之间数值差是多少,每个level区间对应的色块在colorbar上都会占用相同的长度,所以你会看到1和1.1之间的间距和其他差为1的区间长度一致。
解决方法
调用plt.colorbar()时添加spacing='proportional'参数即可,该参数会强制colorbar按照levels的实际数值差比例分配展示长度。
修正后代码
只需要修改colorbar生成的那一行即可,完整代码如下:
import numpy as np import matplotlib.pyplot as plt x = np.arange(-2.0, 3.0, 0.025) y = np.arange(-2.0, 3.0, 0.025) X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) Z = (Z1 - Z2) * 2 levels = np.arange(-2,3,1) levels=np.append(levels,1.1) levels=np.sort(levels) fig, ax = plt.subplots() c = plt.contourf(X, Y, Z, levels=levels,alpha=0.15) cs = plt.contour(X, Y, Z, levels=levels) ax.clabel(cs, inline=1, fontsize=10) # 仅修改这一行,添加spacing参数 cbar=plt.colorbar(c, spacing='proportional') plt.show()
修改后运行即可看到1~1.1对应的色块在colorbar上的长度仅为其他1单位间隔长度的1/10,符合实际数值比例。
内容的提问来源于stack exchange,提问作者user536696
相关产品推荐
相关产品推荐

