Matplotlib等高线图色条未完全填充问题求助
问题描述
我用Matplotlib绘制等高线图,图表数据范围大致在10到60之间,但为了与同类图表对比,需将色条显示范围设置为0到330。我曾学习过Python课程,但以统计和数值计算内容为主,对Matplotlib并不熟悉。我的代码如下:
f24= o3_120_mean*(1e+9) l24= o3_125_mean*(1e+9) no= np.array(no_emissions) co= np.array(co_emissions) fig1= plt.figure() ax1= fig1.add_subplot() isop= ax1.contourf(co,no,f24, cmap='rainbow', vmin=0, vmax=330) ax1.loglog() ticks= np.arange(0,330,30) cbar= fig1.colorbar(isop) cbar.set_ticks(ticks)
当前生成的图表色条未完全填充(见下图),求解决方法。
解决方法
问题根源是contourf默认会根据数据实际范围自动生成等高线层级,即便设置了vmin和vmax,如果没有指定覆盖0-330全范围的层级,色条只会渲染数据用到的颜色区间,剩余部分留白。
具体修正步骤
手动指定等高线层级,让其覆盖vmin到vmax的完整范围,修改contourf调用时加上levels参数即可。
修改后的完整代码:
f24= o3_120_mean*(1e+9) l24= o3_125_mean*(1e+9) no= np.array(no_emissions) co= np.array(co_emissions) fig1= plt.figure() ax1= fig1.add_subplot() # 生成覆盖0到330的均匀层级 levels = np.linspace(0, 330, 12) isop= ax1.contourf(co,no,f24, cmap='rainbow', vmin=0, vmax=330, levels=levels) ax1.loglog() ticks= np.arange(0,330,30) cbar= fig1.colorbar(isop) cbar.set_ticks(ticks)
补充说明
np.linspace(0, 330, 12)会生成12个均匀分布的数值,对应11个颜色区间,刚好覆盖0-330的全范围;- 加上
levels参数后,色条会按照指定的完整范围渲染,不会再出现留白区域。
内容的提问来源于stack exchange,提问作者abi
相关产品推荐
相关产品推荐

