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

如何用matplotlib的contourf实现阈值下固定颜色的等高线图

实现Matplotlib等高线图阈值分段着色

要实现阈值以下固定颜色、阈值以上渐变的等高线图,核心是自定义颜色映射和调整等高线层级,以下是具体实现方案:

步骤说明

  1. 自定义颜色映射:将阈值以下的区域设为固定颜色(比如黑色),阈值以上复用viridis的渐变色彩。
  2. 分割等高线层级:以阈值为分界,低于阈值的区域用单一区间统一着色,高于阈值的区域用连续层级实现渐变。

修改后的代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

x = np.linspace(0, 50, 1000)
y = np.linspace(0, 20, 1000)
X, Y = np.meshgrid(x, y)

Z = np.sin(X) + np.cos(Y)
threshold = 1.03

# 构建自定义颜色映射
# 获取viridis的渐变色彩数组
viridis_colors = plt.cm.viridis(np.linspace(0, 1, 256))
# 阈值以下的固定黑色(RGBA格式)
black = np.array([0, 0, 0, 1])
# 拼接颜色:黑色在前,viridis渐变在后
custom_colors = np.vstack([black[np.newaxis, :], viridis_colors])
custom_cmap = ListedColormap(custom_colors)

# 设置等高线层级
# 低于阈值的区间:从Z最小值到阈值
lower_levels = [Z.min(), threshold]
# 高于阈值的连续层级:从阈值到Z最大值,生成300个渐变点
upper_levels = np.linspace(threshold, Z.max(), 300)
# 合并层级,避免重复的阈值
lvls = np.concatenate([lower_levels, upper_levels[1:]])

# 绘制等高线图
contour_plot = plt.contourf(X, Y, Z, levels=lvls, cmap=custom_cmap)
colorbar = plt.colorbar(contour_plot)

# 可选:调整色标刻度,突出阈值位置
colorbar.set_ticks([Z.min(), threshold, Z.max()])
plt.show()

关键细节解释

  • 颜色映射:通过ListedColormap拼接固定颜色和渐变色彩数组,确保阈值以下区域统一显示黑色。
  • 层级设置:将阈值作为层级分割点,低于阈值的区域用[Z.min(), threshold]单一区间,contourf会自动为该区间填充固定颜色;高于阈值的区域用连续层级,实现渐变效果。
  • 层级必须严格递增,因此合并时要去掉upper_levels中重复的阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:51