这是此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
条目叠加在一起?
答案 0 :(得分:0)
在pylab_examples example code: custom_cmap.py中解释得很好。让我为你解释,如果我错了,请纠正我。
第一列代表位置'x',第2列代表色标。
现在考虑你的例子。这是一个不连续的情况,意味着第二和第三列是相同的。 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,红色从那里增加 当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))}