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

如何将matplotlib色图中最小两个值对应的颜色替换为白色

Matplotlib发散色图多中心白色色阶实现方案

核心实现步骤

  • 首先保证每帧colorbar的数值范围对称,以0为中心
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 计算当前帧数据的对称上下限
vmax = np.abs(current_frame_data).max()
vmin = -vmax
  • 自定义色阶数量,此处以10个色阶(对应11个边界值,符合奇数个边界的需求)为例
# 生成对称的色阶边界
levels = np.linspace(vmin, vmax, 11)
  • 修改seismic色图,将中心两侧的两个色阶替换为白色
# 获取原始seismic色图的颜色列表
orig_cmap = plt.cm.seismic
color_num = len(levels) - 1
colors = orig_cmap(np.linspace(0, 1, color_num))

# 替换中心正负两侧的色阶为白色(RGBA格式)
mid_idx = color_num // 2
colors[mid_idx - 1] = [1, 1, 1, 1]
colors[mid_idx] = [1, 1, 1, 1]

# 生成自定义色图
custom_cmap = ListedColormap(colors)
  • 绘制contourf并绑定colorbar
cont = plt.contourf(x_coords, y_coords, current_frame_data, levels=levels, cmap=custom_cmap, vmin=vmin, vmax=vmax)
cbar = plt.colorbar(cont)

动画适配注意点

  • 每一帧更新时只需重新计算vmin/vmax、更新levels,再通过cont.set_array(current_frame_data.ravel())更新数据即可,无需反复重建colorbar,可大幅提升动画流畅度
  • 如果需要保留极值的显示,可以在contourf中添加参数extend='both',超出范围的数值会在colorbar两端用三角标记显示
    如果你的色阶数量有调整,只需要修改levels的长度,代码会自动适配中心两个色阶的替换逻辑,不需要手动改索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:54:03