matplotlib自定义colormap工作原理及色阶范围设置问题
问题根因
你当前代码生成渐变颜色的核心原因是不了解Matplotlib自定义色卡字典cdict的参数逻辑:
每个颜色通道对应的元组格式为(x, y_left, y_right),其中x是归一化的输入值,y_left是输入值小于等于x时该通道的取值,y_right是输入值大于等于x时该通道的取值。如果相邻两个分界点的通道取值是连续的,Matplotlib会自动在两个点之间做线性插值,所以你会得到平滑过渡的效果。
正确实现代码
要实现分段纯色的阶跃效果,只需要在分界点位置设置同个通道的y_left和y_right为不同值,强制跳变即可,对应你的需求的配置如下:
from matplotlib.colors import LinearSegmentedColormap cdict = { # 红色通道配置 'red': [ (0.0, 1.0, 1.0), (0.75, 1.0, 1.0), # 0.916分界处,左侧红为1,右侧直接跳为0 (0.916, 1.0, 0.0), (1.0, 0.0, 0.0) ], # 绿色通道配置 'green': [ (0.0, 0.0, 0.0), # 0.75分界处,左侧绿为0,右侧直接跳为1 (0.75, 0.0, 1.0), (0.916, 1.0, 1.0), (1.0, 1.0, 1.0) ], # 蓝色通道全程为0,不需要跳变 'blue': [ (0.0, 0.0, 0.0), (1.0, 0.0, 0.0) ] } # 生成自定义色卡 custom_cmap = LinearSegmentedColormap('custom_cmap', cdict)
效果说明
上述配置生成的色卡完全匹配你的需求:
- 0 ≤ 输入值 < 0.75:红=1、绿=0、蓝=0,呈现纯红色
- 0.75 ≤ 输入值 < 0.916:红=1、绿=1、蓝=0,呈现纯黄色
- 0.916 ≤ 输入值 ≤ 1:红=0、绿=1、蓝=0,呈现纯绿色
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

