Skip to main content
 首页 » 编程设计

python之使用 LinearSegmentedColormap 时出现意外插值

2024年11月01日33Renyi-Fan

我正在尝试创建一个自定义颜色图,它结合了插值和离散化的颜色段。我希望 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 个问题。

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

请您参考如下方法:

这是因为 imshow 的默认插值是双线性的。将其设置为 'none' 可能会使颜色显示如您所愿。

所以添加:

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

然后它看起来像:

如果增加矩阵的大小,您会注意到红色和蓝色之间的边缘如预期的那样是离散的,而其余部分是插值的: