将离散值映射到颜色

3

我正在尝试基于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)

感谢您的信件。

听起来你想要一个字典,将这些离散值映射到pcolor值。 - OMGtechy
2个回答

6
我认为您不想使用pcolor。从Matlab文档中看到(可能是matplotlib的pcolor执行相同操作):
最小值和最大值元素被分配为颜色映射中的第一个和最后一个颜色。剩余元素的颜色由从值到颜色映射元素的线性映射确定。
您可以尝试使用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


2
根据这份文档,您可以像这样创建颜色。
red = (1, 0, 0)    # This would be red
green = (0, 1, 0)  # this is green

所以,颜色 = ((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是右侧的颜色。

如果您想要特定的颜色,可以定义自己的渐变。 这篇文章 是有关colormaps的一个不错的教程。


我稍微修改了我的代码以适应我想要的内容。总体上,我理解颜色定义的工作原理,但我仍然不知道如何将其适配到pcolor语句中。 - Kexin Xu
在回复中添加了一个简单的示例。 - jcoppens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接