使用LinearSegmentedColormap时出现意外插值

时间:2013-12-09 17:16:34

标签: python matplotlib color-mapping

我正在尝试创建一个自定义颜色贴图,它结合了插值和离散化的颜色段。我希望matplotlib的LinearSegmentedColormap可以提供这样的功能。我的测试用例是创建一个10x10矩阵,其中第0行填充0,行加1,等等。然后,我尝试创建一个颜色映射,从黑色到蓝色插值,然后离散地切换为红色,然后从红色插值白色从蓝色到红色的预期离散过渡不是离散的,而是演示了意外的插值。

import matplotlib.pyplot as plt
import matplotlib as m
import numpy as np

mat = np.ndarray((10,10))
for i in xrange(10):
    mat[i] = i

colors = ['black', 'blue', 'red', 'white']
index = [0.0, 0.5, 0.5, 1.0]

indx_clr = zip(index, colors)
cm = m.colors.LinearSegmentedColormap.from_list('blue_red', indx_clr, 256)

plt.imshow(mat, cmap=cm)
plt.show()

下面显示了意外的插值,这要归功于亚军。

enter image description here

我有两个问题。

  1. 为什么蓝色区域插入红色区域?
  2. 如何创建组合离散和插值色段的色彩图?

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为imshow的默认插值是双线性的。将其设置为'none'可能会使颜色按预期显示。

添加:

plt.imshow(mat, cmap=cm, interpolation='none')

然后它看起来像:

enter image description here

如果你增加矩阵的大小,你会注意到红色和蓝色之间的边缘是按预期离散的,而其余的是内插的:

enter image description here