我正在尝试创建一个自定义颜色贴图,它结合了插值和离散化的颜色段。我希望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()
下面显示了意外的插值,这要归功于亚军。
我有两个问题。
答案 0 :(得分:2)
这种情况正在发生,因为imshow
的默认插值是双线性的。将其设置为'none'
可能会使颜色按预期显示。
添加:
plt.imshow(mat, cmap=cm, interpolation='none')
然后它看起来像:
如果你增加矩阵的大小,你会注意到红色和蓝色之间的边缘是按预期离散的,而其余的是内插的: