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

Matplotlib绘制含NaN的自定义形状热图的实现与配置

自定义NaN值的显示颜色

Matplotlib所有热图接口的NaN值渲染,统一由所用颜色映射(colormap)的bad通道控制,默认该通道显示为纯白色,无需修改各个绘图接口的独立参数,直接调整colormap的bad配置即可实现自定义配色。
具体操作流程:

  • 复制原colormap的可编辑副本,避免直接修改全局colormap实例,防止同一脚本内其他绘图场景被影响
  • 调用副本的set_bad()方法,传入自定义的颜色值(支持十六进制色值、RGB元组、命名色值等所有Matplotlib兼容的颜色格式),可同步设置无效区域的显示透明度

注意:该配置对matshow、imshow、pcolormesh等所有基于colormap渲染的热图接口全部生效,不需要针对不同接口单独设置。

修改后的核心绘图代码片段:

# 原有边界与归一化逻辑保持不变
bounds = np.linspace(param_ng, param_vg, continious_color_map.N).reshape(continious_color_map.N,)
norm = mpl.colors.BoundaryNorm(bounds, continious_color_map.N)

# 新增自定义NaN颜色配置
cmap_custom = continious_color_map.copy()
# 示例:将NaN区域设置为深灰色,不透明
cmap_custom.set_bad(color='#333333', alpha=1.0)

fig, ax = plt.subplots(1, 1, figsize = (7, 7))
# 替换原有cmap参数为自定义配置的颜色映射
img = ax.matshow(data, cmap=cmap_custom, norm=norm)

divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size='5%', pad='1%')
fig.colorbar(img, cax=cax, ax=ax, ticks=bounds)
无手动矩阵构建的简化热图实现

完全可以省去“构建固定尺寸二维矩阵、逐点标记范围外值为NaN”的冗余步骤,只要采样点本身对应规则矩形网格的单元中心,直接传入坐标与参数值即可生成连续矩形块热图,不会出现散点类的离散标记效果,核心使用pcolormesh接口实现:

  • 当你持有与参数值z同形状的二维坐标矩阵X、Y(即每个z值对应的x、y坐标,仅包含圆形覆盖范围内的有效点位,无NaN填充),可直接将X、Y、z传入接口,系统会自动根据坐标位置绘制对应矩形色块,范围外区域自动留空,与手动填充NaN的绘图效果完全一致。
  • 当你持有展平的一维点集(长度相同的x、y、z数组,对应每个采样点的坐标与参数值),只需对x、y坐标去重排序,向外扩展半格距离生成对应方向的色块边界,不需要手动补全全尺寸矩阵,即可生成规则矩形色块热图。

简化流程对应的代码示例:

# X、Y为仅包含有效点位的二维坐标矩阵,z为对应点位的参数值,无NaN填充
img = ax.pcolormesh(X, Y, z, cmap=cmap_custom, norm=norm)

注意:该方案不需要额外插值计算,只要采样点对齐规则网格,生成的色块拼接效果与手动构建矩阵的效果无差异,可大幅降低数据预处理的代码量。


内容的提问来源于stack exchange,提问作者Дмитрий Кондратенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 02:57:02