2017-01-23 58 views

回答

3

你基本上需要創建自己的顏色表有你想要的特定功能。當然,這樣做時可以使用現有的色彩貼圖。

的colormaps總是01之間。這個範圍將被映射到數據區間。因此,爲了-0.50.5之間建立的白人,我們需要知道數據的範圍 - 比方說數據從去到-11。然後,我們可以決定讓地震地圖的下部(藍色)部分從-1變爲-0.5,然後在-0.5+0.5之間有白色,最後是地震圖的上部(紅色)從0.51。在一個顏色表的語言,這對應於範圍[0,0.25][0.25, 0.75][0.75,1]。然後我們可以創建一個列表,其中第一個和最後一個百分之25是地震地圖的顏色,中間是50%的白色。

此列表可用於使用matplotlib.colors.LinearSegmentedColormap.from_list("colormapname", listofcolors)創建色彩映射表。

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

n=50 
x = 0.5 
lower = plt.cm.seismic(np.linspace(0, x, n)) 
white = plt.cm.seismic(np.ones(100)*0.5) 
upper = plt.cm.seismic(np.linspace(1-x, 1, n)) 
colors = np.vstack((lower, white, upper)) 
tmap = matplotlib.colors.LinearSegmentedColormap.from_list('terrain_map_white', colors) 

x = np.linspace(0,10) 
X,Y = np.meshgrid(x,x) 
z = np.sin(X) * np.cos(Y*0.4) 

fig, ax = plt.subplots() 
im = ax.imshow(z, cmap=tmap)  
plt.colorbar(im) 

plt.show() 

enter image description here

對於更一般的情況下,你可能需要(使用matplotlib.colors.Normalize)顏色正常化。見例如this example,其中某一顏色在顏色表總是固定在0的數據值,獨立於數據的範圍。