You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 00:02:33