2013-12-09 38 views
2

我正在嘗試創建一個自定義顏色貼圖,該貼圖組合了插值和離散化的顏色段。我希望matplotlib的LinearSegmentedColormap可以提供這樣的功能。我的測試用例是創建一個10x10矩陣,其中第0行用0填充,第1行用1等等。然後我嘗試創建一個從黑到藍插值的顏色貼圖,然後離散地切成紅色,然後從紅色變白。從藍色到紅色的預期離散過渡不是離散的,而是演示一個意想不到的插值。使用LinearSegmentedColormap時的意外插值

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

我有2個問題。

  1. 爲什麼藍色區域插入紅色區域?
  2. 如何創建組合離散和插值色段的色圖?

回答

2

這是因爲imshow的默認插值是雙線性的。將其設置爲'none'可能會使顏色按您的預期顯示。

所以加:

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

然後,它會看起來像:

enter image description here

如果提高基體的大小,你會發現,紅色和藍色之間的邊緣是離散的預計其餘內插:

enter image description here