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

时间:2017-10-08 18:29:07

标签: python numpy matplotlib jupyter-notebook

我尝试以这种方式使用xy坐标和颜色的地图创建一个Color Mesh图:

<head>
    <title>Sample</title>
    <script type="text/javascript">
        function Add() {
            var n1 = document.getElementById("numOne").value;
            var n2 = document.getElementById("numTwo").value;
            var total = Number(n1) + Number(n2); // Number() function

            document.getElementById("output").innerHTML = total;
        }
    </script>
</head>
<body>
    <h1>Calc</h1><br />
    <form method="post" action="">
        NUM 1: <input type="number" name="numOne" id="numOne" /><br />

        NUM 2: <input type="number" name="numTwo" id="numTwo" /><br />

        <input type="button" value="Add" onclick="Add()" /><br />

        Result: <label id="output"></label>
    </form>
</body>

当有三种颜色的列表并且我尝试将xy-points映射到所有颜色时(例如上面的代码中),它可以正常工作:

enter image description here

但是当有一个三种颜色列表时,我尝试将点映射到它们的两个中,映射出错:

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)

enter image description here

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

1 个答案:

答案 0 :(得分:3)

色彩映射在0和1之间归一化。当它们在绘图中使用时,归一化将转换为数据的最小值和最大值。如果0和1是最小值和最大值,则0将是地图的第一种颜色(红色),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

相关问题