在pylab_examples 示例代码中: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))}