我尝试以这种方式使用 xy 坐标和颜色图创建颜色网格图:
from matplotlib.colors import ListedColormap import numpy as np %pylab inline colors = ListedColormap(['red', 'blue', 'yellow']) xx,yy = np.meshgrid(np.arange(1, 6, 1), np.arange(1, 6, 1)) zz = np.array([[1,1,1,1,1], [1,1,1,1,1], [1,1,1,1,1], [2,2,0,0,0], [2,2,0,0,0]]) pyplot.pcolormesh(xx, yy, zz, cmap = colors)
当有三种颜色的列表并且我尝试将 xy 点映射到所有颜色中时,它可以正常工作(如上面的代码所示):
但是当有三种颜色的列表,而我尝试将点仅映射到其中两种颜色时,映射就会出错:
zz = np.array([[1,1,1,1,1], [1,1,1,1,1], [1,1,1,1,1], [0,0,0,0,0], [0,0,0,0,0]]) pyplot.pcolormesh(xx, yy, zz, cmap = colors)
它应该映射到颜色 0(红色)和 1(蓝色),但我得到的图却有 0(红色)和2(黄色)。错误在哪里?
色彩图在 0 和 1 之间标准化。当它们用于绘图时,标准化将转移到数据的最小值和最大值。如果 0 和 1 是最小值和最大值,则 0 将是地图的第一个颜色(红色),1 将是最后一个颜色(黄色)。
您需要的是将所需颜色图行为考虑在内的规范化。最简单的选择是使用vmin和vmax
vmin
vmax
zz = np.array([[1,1,1,1,1], [1,1,1,1,1], [1,1,1,1,1], [0,0,0,0,0], [0,0,0,0,0]]) plt.pcolormesh(xx, yy, zz, cmap = colors, vmin=0,vmax=colors.N)