Skip to main content
 首页 » 编程设计

python之Matplotlib:颜色图可以暗示不同的默认规范化吗

2025年05月04日11jillzhang

我有以下颜色图:

import matplotlib.pyplot as plt 
from matplotlib.colors import LinearSegmentedColormap, NoNorm 
 
mycmap_dict = { 
    'red': ( 
            (-2.0, 1.0, 1.0), 
            (-1.0, 0.0, 1.0), 
            ( 0.0, 0.0, 0.0), 
            ( 1.0, 1.0, 0.0), 
            ( 2.0, 1.0, 1.0), 
        ), 
 
    'green': ( 
            (-1.0, 0.0, 1.0), 
            ( 0.0, 0.0, 0.0), 
            ( 1.0, 1.0, 1.0), 
            ( 2.0, 0.0, 0.0), 
        ), 
 
    'blue': ( 
            (-2.0, 0.0, 0.0), 
            (-1.0, 1.0, 1.0), 
            ( 0.0, 0.0, 0.0), 
            ( 1.0, 0.0, 1.0), 
        ) 
    } 
 
my_cmap = LinearSegmentedColormap('my', mycmap_dict) 
plt.register_cmap(cmap=my_cmap) 
 
my_norm = NoNorm() 

由于颜色图基于 [-2.0, 2.0] 范围内的数据而不是 [0.0, 1.0],因此使用默认规范化没有意义。我希望能够说“使用 my_cmap 时默认使用 my_norm”——这可能吗?

请您参考如下方法:

恐怕简短的回答是:不。

为了在您的自定义颜色图和规范化之间获得最佳的插值性,我强烈建议您遵守以下规则:

  • Norm 获取数据并转换为 0-1*
  • Cmap 采用 0-1 范围内的 float 并转换为 RGBA 值

* 此规则有一个异常(exception) - 有时您希望将 索引 到颜色映射中,因此我相信在这种情况下,规范会返回字节,然后用于按索引访问颜色在颜色图中。

抱歉,答案不是肯定的 :-)