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

如何为matplotlib imshow绘图制作适配3维数组的自定义colorbar

问题解决步骤

1. 三维数组降维处理

你当前使用的ex数组维度为(60,60,1),多了最后一个冗余维度,直接用numpy的squeeze方法去掉即可适配二维绘图要求:

ex = np.squeeze(ins[1])
# 处理后数组维度变为(60,60)

2. 修正自定义配色与绘图代码

你之前的实现存在两个核心错误:

  • 归一化参数vmin和vmax写反,且和你需要的刻度范围不匹配
  • contourf的x、y入参长度和数组维度不匹配

完整可运行修正代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import matplotlib as mpl

# 数据读取与预处理
ins = np.load('ins.npy')
ex = np.squeeze(ins[1])

# 自定义分段色阶与归一化
levels = [20,35,45,55,65,75]
colors = ["#eaa941", "#efef39", "#53a447", "#3b387f", "#48a2ba"]
cmap = mpl.colors.ListedColormap(colors)
cmap.set_under("crimson")
cmap.set_over("w")
# 使用BoundaryNorm适配分段配色,更符合气象填色图逻辑
norm = mpl.colors.BoundaryNorm(levels, ncolors=cmap.N, extend='both')

# 绘图
ax = plt.gca()
# 若使用imshow绘图用下行代码
im = ax.imshow(ex, cmap=cmap, norm=norm)
# 若偏好contourf绘图,替换上一行即可:
# im = ax.contourf(ex, levels=levels, extend='both', cmap=cmap, norm=norm)

# 添加自定义colorbar
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
cbar = plt.colorbar(im, cax=cax, ticks=levels)
# 可按需修改colorbar的标签名称
cbar.set_label('对应物理量名称')

plt.show()

补充说明

如果你的图像需要自定义坐标范围而非默认的0-59,可给imshow添加extent=[x最小值, x最大值, y最小值, y最大值]参数调整即可。

内容的提问来源于stack exchange,提问作者McM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:06:01