我问过昨天如何将离散值映射到颜色并获得以下有用的答案。
我试图根据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')
但是,值列表有一些数据属性,我也想在图表中显示它们。具体来说有两件事:
每个颜色列表都有一个唯一的类型,因此图表应显示每个水平颜色条的类型。
每个颜色列表都有一个相应的位置列表,表示最后一个位置的结束位置(所有这些位置从0开始,到20结束)
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轴的变化外,图形看起来应该相似,以指示颜色的位置和颜色列表的类型。
非常感谢任何帮助
答案 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 = ...