如何修改matplotlib中contourf方法的色条刻度标签?
Matplotlib等高线色条刻度调整方案
问题背景
已生成的等高线效果:
初始实现代码:
import matplotlib.pyplot as plt def build_contour_plot(nu): plt.contourf(B, D, nu, 111) plt.colorbar() plt.xlabel('X') plt.ylabel('Y') plt.show() b = np.arange(0, 1.0, 0.001) d = np.arange(0, 1.0, 0.001) B, D = np.meshgrid(b, d) nu = np.ceil(np.minimum(B, D)*5)/5 build_contour_plot(nu)
上述代码运行后,右侧色条默认刻度为[0.00, 0.11, ..., 0.99],需要调整为步长0.1的序列[0, 0.1, 0.2, ..., 1]。
原因说明
当给plt.contourf传入整数作为层级参数时,matplotlib会自动在数据的最小值、最大值区间内均匀切分对应数量的层级,自动生成的色条刻度无法和0.1步长的固定节点对齐,因此会出现偏移的刻度值。另外原代码缺少numpy库导入,直接运行会触发名称错误。
修正代码
调整逻辑:
- 手动生成0到1区间、步长0.1的层级数组,显式传入
contourf保证等高线分层和预期刻度对齐 - 调用
colorbar时通过ticks参数指定要显示的刻度值 - 补全
numpy导入,可选配置刻度标签格式,去掉无意义的末尾小数0
import matplotlib.pyplot as plt import numpy as np def build_contour_plot(nu): # 生成0-1区间步长0.1的层级,终止值设为1.1是因为np.arange为左闭右开区间 levels = np.arange(0, 1.1, 0.1) plt.contourf(B, D, nu, levels=levels) # 指定色条刻度 cbar = plt.colorbar(ticks=levels) # 取消下一行注释即可让刻度显示为0、0.1...1,而非0.0、0.1...1.0 # cbar.ax.set_yticklabels([f'{val:g}' for val in levels]) plt.xlabel('X') plt.ylabel('Y') plt.show() b = np.arange(0, 1.0, 0.001) d = np.arange(0, 1.0, 0.001) B, D = np.meshgrid(b, d) nu = np.ceil(np.minimum(B, D)*5)/5 build_contour_plot(nu)
运行上述代码后,色条刻度将严格对齐0.1间隔的节点,不会出现0.11这类偏移值。
内容的提问来源于stack exchange,提问作者Corram
相关产品推荐
相关产品推荐

