python - PyPlot ColorMesh 使用错误的颜色映射创建绘图

标签 python numpy matplotlib jupyter-notebook

我尝试以这种方式使用 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 点映射到所有这些颜色时它工作正常(如上面的代码):

enter image description here

但是当有三种 颜色的列表时,我试图将点映射到其中的两种,映射出错了:

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)

enter image description here

它应该映射到颜色 0(红色)和 1(蓝色),但我得到的图是 0(红色)和 2(黄色) 颜色。哪里错了?

最佳答案

颜色图在 0 和 1 之间标准化。当它们用于绘图时,标准化会转移到数据的最小值和最大值。如果 0 和 1 是最小值和最大值,则 0 将是 map 的第一种颜色(红色),1 将是最后一种颜色(黄色)。

您需要的是将所需的颜色图行为考虑在内的规范化。最简单的选择是使用 vminvmax

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)

enter image description here

关于python - PyPlot ColorMesh 使用错误的颜色映射创建绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634600/

相关文章:

python - 在 cython 中迭代数组,列表是否比 np.array 更快?

python - 如何在 symlog 刻度上放置小刻度?

python - Scikit 学习,Numpy : Changing the value of an read-only variable

python - 使用 "knee.py"导入 numpy 和 scipy 时出现神秘错误

python - 在 numpy/matplotlib 中以图形和数字方式求解线性二次方程组?

python - matplotlib 中的箱线图 : Markers and outliers

python - 通过应用变换简化 SVG - 减小尺寸

python - 为 python 3.4 安装 mechanize

python - 在数据帧上乘以向量 - 向量化

python - 使用 Pymongo 更新 MongoDB 中的选定字段