我正在尝试创建一个自定义颜色图,它结合了插值和离散化的颜色段。我希望 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()
意外的插值如下所示,感谢 runner 。
我有 2 个问题。
- 为什么蓝色区域插值到红色区域?
- 如何创建结合了离散和插值色段的色图?
请您参考如下方法:
这是因为 imshow 的默认插值是双线性的。将其设置为 'none' 可能会使颜色显示如您所愿。
所以添加:
plt.imshow(mat, cmap=cm, interpolation='none')
然后它看起来像:
如果增加矩阵的大小,您会注意到红色和蓝色之间的边缘如预期的那样是离散的,而其余部分是插值的:
