2017-04-21 81 views
1

我目前正在使用python matplotlib到 將一組要素轉換爲使用色彩地圖cm.jet的可視化表示,並將它們存儲爲numpy.ndarrays ..問題是我無法設置vmin和VMAX,因爲我想..matplotlib色彩地圖外部設置限制plt

什麼我目前正在做的是

Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy as np 
>>> import matplotlib 
>>> from matplotlib import cm 
>>> import matplotlib.pyplot as plt 
>>> a = np.random.randint(5,size=(3,3)) 
>>> convert = plt.get_cmap(cm.jet) 
>>> numpy_a = convert(a) 
>>> numpy_a_limited = convert(a) 

問題是,matplotlib自動調整colorange,給出的數據集,這意味着存儲numpy.ndarray的像素信息不正確。

我試圖修復colorrange,使得像素信息,成爲聽上去很像原始數據..

這是我試圖固定colorrange嘗試。

convert = plt.get_cmap(cm.jet) 
     convert = convert.set_clim(vmin=-6, vmax=2) 

給我的錯誤消息:

AttributeError: 'LinearSegmentedColormap' object has no attribute 'set_clim' 
+0

的錯誤是不言自明。你想實現什麼?你可以展示一個[mcve]或詳細解釋你的方法,這將使得有必要對顏色表進行限制(這是不可能的btw。)。 – ImportanceOfBeingErnest

+0

我添加了一些關於我的問題的細節。 –

回答

1

爲了能夠使用一個顏色表,值的範圍,以必須在0和1之間的值在此範圍之外被截斷,從而導致這些值的動態範圍的損失。

因此,您需要在將數組提供給顏色映射之前對其進行標準化。一種選擇是使用自定義的標準化功能

import matplotlib.pyplot as plt 
import numpy as np 

a = np.random.randint(5,size=(3,3)) 
cmap = plt.cm.jet 
norm = lambda x: (x+2.)/(6.+2.) 
converted_a = cmap(norm(a)) 

另一種選擇是使用內置的規範化實例

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

a = np.random.randint(5,size=(3,3)) 
cmap = plt.cm.jet 
norm = Normalize(vmin=-2, vmax=6) 
converted_a = cmap(norm(a))