按类型和位置将离散值映射到颜色

时间:2015-06-04 21:10:34

标签: python matplotlib

我问过昨天如何将离散值映射到颜色并获得以下有用的答案。

Map discrete value to color

我试图根据4个离散值1,2,3,4来绘制颜色。我想将1定义为黑色,将2定义为红色,将3定义为黄色,将4定义为绿色。有谁知道怎么做?

您可以尝试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. 每个颜色列表都有一个相应的位置列表,表示最后一个位置的结束位置(所有这些位置从0开始,到20结束)

  3. dict = {'Type': ['A', 'B','C'], 'ColorList': [[1,2,2,1,3],[1,1,1,1,4],[2,1,1,2]], 'Position': [[3,6,9,15,20], [2,10,13,16,20], [6, 10, 12, 20]]}

    df = pd.DataFrame(dict)
    

    因此,除了x和y轴的变化外,图形看起来应该相似,以指示颜色的位置和颜色列表的类型。

    非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您需要plt.annotate功能;例如,对于第一个方格plt.annotate ('black', xy = (0, 0), color = 'white')

关于代码的其余部分,最好使用enum的子类(需要Python 3.0):

>>> from enum import Enum
>>> class Color(Enum):
...     black = 1
...     red = 1
...     yellow = 2
...     green = 3

可能包括以下内容:

...     def RGB (self):
...         return {1:(0, 0, 0), 2:(1, 0, 0), 3:(1, 1, 0), 4:(0, 1, 0)}[self.value]

使用Enum的子类重写和列表推导应该使您的代码更易于使用。

PS:我认为你用dict

重写了标准函数dict = ...