了解matplotlib CMAP中的RGB组件

2024-03-29 10:53:19 发布

您现在位置:Python中文网/ 问答频道 /正文

这是这个answer的后续。你知道吗

根据答案,matplotlib cmap的定义如下:

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条目堆叠在一起吗?你知道吗


Tags: 答案answer定义matplotlibmy条目greenblue
1条回答
网友
1楼 · 发布于 2024-03-29 10:53:19

pylab_examples example code: custom_cmap.py中有很好的解释。让我为你解释一下,如果我错了请纠正我。你知道吗

第一列代表位置“x”,第二列和第三列代表色阶。你知道吗

现在想想你的例子。这是不连续的情况,意味着第二列和第三列是相同的。cdict['green']是这样说的 0<;=x<;=1,0(第一列),y(第二列和第三列)为0(无绿色)到1(全绿色),表示x=0.0时全绿色到x=1.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。当x从0到0.5时,绿色从0渐变到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

相关问题 更多 >