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

如何在Python中生成随w值线性演化的白红至白紫Colormap?

实现随w值线性变化的自定义Colormap

核心思路

要实现从白→红到白→紫的线性渐变Colormap,核心是根据w值在红色到紫色的色相区间内插值生成终点颜色,再与白色构建线性分段Colormap。具体步骤:

  • 利用HSV色彩空间的色相(H)维度做线性插值,保证颜色过渡自然
  • 将w的取值范围(1100)映射到红色到紫色的色相区间(00.83,对应HSV色相环的0°到300°)
  • 把插值得到的色相转换为RGB颜色,作为Colormap的最大值端颜色
  • 直接构建从白色到目标颜色的渐变Colormap

代码实现

import numpy as np
from matplotlib.colors import LinearSegmentedColormap
from colorsys import hsv_to_rgb

def get_dynamic_cmap(w):
    # 定义w的取值范围和对应的色相区间
    w_min, w_max = 1, 100
    # 红色色相约0,紫色色相约0.83(对应300°)
    h_min, h_max = 0.0, 0.83
    
    # 线性插值计算当前w对应的色相
    hue = np.interp(w, [w_min, w_max], [h_min, h_max])
    # 转换为RGB,饱和度和明度设为1,保证颜色鲜艳
    end_rgb = hsv_to_rgb(hue, 1.0, 1.0)
    
    # 构建从白色到目标颜色的线性渐变Colormap
    return LinearSegmentedColormap.from_list(
        f'dynamic_cmap_w{w}',
        [(1.0, 1.0, 1.0), end_rgb],
        N=256
    )

# 测试验证
if __name__ == "__main__":
    import matplotlib.pyplot as plt
    
    # 生成不同w值对应的Colormap
    cmap_list = [get_dynamic_cmap(w) for w in [1,10,30,100]]
    w_labels = [1,10,30,100]
    
    # 可视化展示
    fig, axes = plt.subplots(1,4, figsize=(16,3))
    for ax, cmap, w in zip(axes, cmap_list, w_labels):
        im = ax.imshow(np.linspace(0,1,256).reshape(1,-1), cmap=cmap)
        ax.set_title(f'w={w}')
        ax.set_xticks([])
        ax.set_yticks([])
    plt.colorbar(im, ax=axes.ravel().tolist(), orientation='horizontal')
    plt.show()

关键细节说明

  • 选择HSV色彩空间做插值,避免RGB空间插值出现的偏色、过渡不自然问题
  • np.interp负责完成w值到色相的线性映射,确保w变化时颜色呈线性过渡
  • 直接通过LinearSegmentedColormap.from_list构建自定义渐变,比复用现有cmap更灵活可控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:15:30