将离散值映射到颜色

时间:2015-06-01 23:41:15

标签: python matplotlib

我正在尝试基于4个离散值1,2,3,4创建pcolor。我想将1定义为黑色,将2定义为红色,将3定义为黄色,将4定义为绿色。有谁知道怎么做?

test = ([1,2,2,1,3],[1,1,1,1,4],[2,1,1,2,1])
import numpy as np

dataset = np.array(test)
plt.pcolor(dataset)

谢谢,

2 个答案:

答案 0 :(得分:5)

我认为你不想使用pcolor。 From the Matlab docs(可能是matplotlib pcolor做同样的事情):

  

C的最小和最大元素分配了色彩映射中的第一个和最后一个颜色。 C中其余元素的颜色由从值到色图元素的线性映射确定。

您可以尝试imshow,然后使用dict来映射您想要的颜色:

colordict = {1:(0,0,0),2:(1,0,0),3:(1,1,0),4:(0,1,0)}
test = ([1,2,2,1,3],[1,1,1,1,4],[2,1,1,2,1])
test_rgb = [[colordict[i] for i in row] for row in test]
plt.imshow(test_rgb, interpolation = 'none')

enter image description here

答案 1 :(得分:2)

根据this doc,您可以创建这样的颜色

red = (1, 0, 0)    # This would be red
green = (0, 1, 0)  # this is green

所以     colors =((0,0,0),(1,0,0),(0,1,0))

会给你colors[1]红色,colors[2]绿色。

该程序显示了pcolor的工作原理:

import pylab as plt
import numpy as np

def test_pcolor():
    cmap = plt.get_cmap('gnuplot')
    Z = np.empty((100, 100))
    for x in range(100):
        for y in range(100):
            Z[y, x] = 0.0001 * x * y

    plt.subplot(1,1,1)
    c = plt.pcolor(Z, cmap = cmap)

    plt.show()

def main():
    test_pcolor()
    return 0

if __name__ == '__main__':
    main()

左下角为0.0,右上角为1.0。 pcolor从渐变中获取实际颜色。我在这里使用了gnuplot渐变。所以0.0是渐变的左边颜色,1.0是右边的颜色。

如果您想要特定颜色,可以定义自己的渐变。 This是一个很好的彩色地图教程。