class matplotlib.colors.Normalize(vmin=None, vmax=None, clip=False)
Normlize是用來把數據標準化(歸一化)到[0,1]這個期間內,vmin是設置最小值, vmax是設置最大值,小於最小值就取最小值,大於最大值就取最大值。clip=True看文檔的意思是若是超出了範圍就設置爲0或者1,離哪個值近就設置爲哪個值。寫了測試沒有發現clip=False和clip=True有什麼區別(這個可能還和colormap中的set_uper和set_under有關)。html
若是沒有設置vmin, vmax就是第一次出來數據集中的最大值和最小值。 下面和matplotlib.cm.ScalarMappable結合看一下不一樣的設置對數據標準化的影響。api
# -*- coding:utf-8 -*- import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib.cm import ScalarMappable import matplotlib fig, ax = plt.subplots() data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # norm = mpl.colors.Normalize() # norm = mpl.colors.Normalize(-5,5,clip=False) # norm = mpl.colors.Normalize(1,5,clip=False) # norm = mpl.colors.Normalize(0,5,clip=False) norm = mpl.colors.Normalize(2,5,clip=True) # norm = mpl.colors.Normalize(2,5,clip=False) # norm.autoscale(data) print norm.scaled() sm = ScalarMappable(norm=norm) print sm.get_clim() print sm.get_array() print sm.to_rgba(data) print norm.scaled() print sm.get_clim() # print matplotlib.__version__ sm.set_array(data) print sm.get_array()
class matplotlib.colors.Colormap(name, N=256)
Colormap實例是用來把[0,1]之間的數轉換爲rgba顏色的。name是生成的Colormap的名字,N是設置rgb數字化水平的參數。app
下面看一個簡單的例子:測試
#-*-coding:utf-8-*- import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection from matplotlib.colors import ListedColormap, BoundaryNorm # 4個線段集合(不必定是直線) segments = [[[0,0],[5,5]],[[0,0],[2,4],[10,10]],[[0,0],[4,2],[10,10]],[[5,5],[10,10]]] fig, axes = plt.subplots(4, 1, sharex=True, sharey=True) axes[0].axis([0,10,0,10]) cmap = ListedColormap(['r', 'g', 'b']) # BoundaryNorm 會根據cmap把不一樣的區間映射到對應的顏色 norm = BoundaryNorm([0, 2, 4,10], cmap.N) lc = LineCollection(segments, cmap=cmap, norm=norm) # 設置線段集合的顏色,一個segment一個顏色 lc.set_array(np.array([0,2,4,10])) lc.set_linewidth(2) line = axes[0].add_collection(lc) fig.colorbar(line, ax=axes[0]) axes[1].axis([0,10,0,10]) cmap = ListedColormap(['r', 'g', 'b']) norm = BoundaryNorm([0,2,4,6,8,10], cmap.N) lc = LineCollection(segments, cmap=cmap, norm=norm) lc.set_array(np.array([0,4,8,10])) lc.set_linewidth(2) line = axes[1].add_collection(lc) fig.colorbar(line, ax=axes[1]) axes[2].axis([0,10,0,10]) norm = plt.Normalize(1, 10) lc = LineCollection(segments, cmap='viridis', norm=norm) lc.set_array(np.array([0,4,8,10])) lc.set_linewidth(2) line = axes[2].add_collection(lc) fig.colorbar(line, ax=axes[2]) axes[3].axis([0,10,0,10]) norm = plt.Normalize(1, 1000) lc = LineCollection(segments, cmap='viridis', norm=norm) lc.set_array(np.array([0,4,8,800])) lc.set_linewidth(2) line = axes[3].add_collection(lc) fig.colorbar(line, ax=axes[3]) plt.savefig("line.png") plt.show()
大概的是這個樣子滴:code
從上面的一個例子咱們也能夠看出,Normalize和Colormap是用來處理顏色和數字映射的。同一個Colormap能夠經過不一樣的Normalize映射到不一樣的數字區間(獲取反過來講更加準確)。具體的根據本身的實際狀況調整。orm
matplotlib.colors.Normalizehtm