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