我想创建一个颜色表,它不是简单的颜色数组,而是像字典一样,在其中将每种颜色分配给特定标签。
我的数据采用数据框的形式,其中每个特定标签都有小数。下面是一个简化的示例:
T1 = pd.DataFrame({'S1': [0.7, 0.1, 0.05, 0.05, 0, 0.03, 0.033, 0.033, 0, 0]}, index=['B','C','D','F','G','H','I','M','N','P'])
T2 = pd.DataFrame({'S2': [0.6, 0.1, 0.1, 0.05, 0.05, 0.033, 0.033, 0.033, 0]}, index=['A','D','E','F','G','H','I','L','M'])
我想要将数据绘制为堆积的条形图。
我可以做到:非常简单,每个堆叠的块(或类别)的颜色都不同。但是,每个类别都会自动获得一种颜色,由绘图功能分配以在单个绘图中保持一致(这显然是大多数用户所需要的)。
我想要的是能够创建“永久”颜色图,以使不同图之间的颜色保持一致。然后,我可以分别绘制每个数据框,但要确保每个类别始终显示相同的颜色(即“ G”始终为红色)。
由于类别列表一旦组合就可以是50-60长,因此我需要为其分配唯一的随机颜色。
男
如果我理解得很好,这会有所帮助:
import matplotlib._color_data as mcd
import pandas as pd
index1 = ['B','C','D','F','G','H','I','M','N','P']
index2 = ['A','D','E','F','G','H','I','L','M']
T1 = pd.DataFrame({'S1': [0.7, 0.1, 0.05, 0.05, 0, 0.03, 0.033, 0.033, 0, 0]}, index=index1)
T2 = pd.DataFrame({'S2': [0.6, 0.1, 0.1, 0.05, 0.05, 0.033, 0.033, 0.033, 0]}, index=index2)
indexes = set(index1).union(set(index2))
colores = list(mcd.XKCD_COLORS.values())[0:len(indexes)]
paleta = {i:c for i, c in zip(indexes, colores)}
T1.T.plot.bar(color=T1.index.map(paleta), stacked=True)
T2.T.plot.bar(color=T2.index.map(paleta), stacked=True)
我创建了一个以索引为键,颜色为值的字典,然后使用该字典映射每个df的索引。