如何设置matplotlib colorbar刻度精确对齐最小与最大值位置
问题描述
使用matplotlib.contourf绘制等高线图时,已通过参数指定数值范围最小值为0、最大值为20,但生成的色条最高刻度仅显示19.8,未在色条最顶端对应位置显示设定的最大值20。
复现代码
import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 10) y = np.linspace(0, 10, 10) xx,yy = np.meshgrid(x,y) X = np.array([xx,yy]).reshape(2,-1) func_plot = X[0] + X[1] func_plot = np.atleast_2d(func_plot).reshape(10, 10) fig, ax = plt.subplots(figsize=(13,7)) ax = plt.subplot(121) cntr = plt.contourf(x,y,func_plot,100,vmin = 0, vmax = 20, alpha = 1) cbar = fig.colorbar(cntr,orientation="vertical")
实际运行效果

解决方法
出现该问题的原因是:传入contourf的层级数为100时,matplotlib自动生成的等高线间隔为0.2,自动选择色条刻度时未将最大值20纳入刻度列表。
只需在生成色条后,手动指定色条刻度,强制包含0和20两个端点即可,核心修改代码如下:
# 生成色条后新增该行,步长可根据自身显示需求调整,只要覆盖0到20的区间、包含两个端点即可 cbar.set_ticks(np.arange(0, 21, 2))
修改后色条顶端会准确显示20的刻度,与你设置的vmax参数完全对应。
内容的提问来源于stack exchange,提问作者Muhammad Rayyan
相关产品推荐
相关产品推荐

