了解matplotlib cmaps中的RGB组件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解matplotlib cmaps中的RGB组件相关的知识,希望对你有一定的参考价值。

这是对这个answer的跟进。

从答案来看,matplotlib cmaps的定义如下:

cdict = {'red': ((0.0, 1.0, 1.0),
                 (1.0, 1.0, 1.0)),

    'green': ((0.0, 1.0, 1.0),
              (1.0, 0.0, 0.0)),

    'blue': ((0.0, 1.0, 1.0),
             (1.0, 0.0, 0.0))}

my_cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict)

我正在努力理解数字与颜色过渡的关系。

每个cdict条目中的“行”和“列”有什么作用?

你能想象红色,绿色和蓝色的cdict条目堆叠在一起吗?

答案

pylab_examples example code: custom_cmap.py已经解释得很好。让我为你解释一下,如果我错了,请纠正我。

第一列代表位置'x',第二列和第三列代表色标。

现在考虑你的例子。这是一个不连续的情况,意味着第二和第三列是相同的。 cdict ['green']表示对于0 <= x <= 1,0(第一列),y(第二列和第三列)为0(无绿色)到1(全绿色),表示x =处的全绿色x = 1.0时0.0到无绿色。在位置x = 1.0时,全红+全绿+全蓝=白。

cdict = {'red': ((0.0, 1.0, 1.0),
                 (1.0, 1.0, 1.0)),

        'green': ((0.0, 1.0, 1.0),
                  (1.0, 0.0, 0.0)),

        'blue': ((0.0, 1.0, 1.0),
                 (1.0, 0.0, 0.0))}

如果存在不连续性,则会稍微复杂一些。

将给定颜色的cdict条目中每行中的3个元素标记为(x,y0,y1)。然后,对于x [i]和x [i + 1]之间的x值,在y1 [i]和y0 [i + 1]之间内插颜色值。

回到食谱的例子,看看cdict ['red'];因为y0!= y1,它表示对于x从0到0.5,红色从0增加到1,但随后它向下跳跃,因此对于x从0.5到1,红色从0.7增加到1.绿色斜坡从0开始当x从0变为0.5时变为1,然后跳回0,当x从0.5变为1时,斜坡变回1。

row i:   x  y0  y1
                /
               /
row i+1: x  y0  y1

例如:

cdict = {'red': ((0.0, 1.0, 1.0), # y[1,3] to y[2,2] is full red from position of 0.0 to 1.0.
                 (0.5, 1.0, 0.0), 
                 (1.0, 1.0, 1.0)), 

        'green': ((0.0, 1.0, 1.0),
                  (0.5, 0.0, 0.0), 
                  (1.0, 1.0, 1.0)), 

        'blue': ((0.0, 1.0, 1.0),
                 (0.5, 0.0, 1.0), 
                 (1.0, 1.0, 1.0))} 

enter image description here

以上是关于了解matplotlib cmaps中的RGB组件的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib imshow

从 matplotlib 中的颜色图中获取单个颜色

从 matplotlib 中的颜色图中获取单个颜色

matplotlib的cmap

Matplotlib:imshow中cmap的作用是啥?

matplotlib 笔记 imshow