【问题标题】:Create a unique "global" colormap to use across multiple stacked bar chart创建一个独特的“全局”颜色图以跨多个堆叠条形图使用
【发布时间】:2020-06-18 05:35:09
【问题描述】:

我想创建一个颜色图,它不是简单的颜色数组,而是像字典一样,我将每种颜色分配给特定的标签。

我的数据采用数据框的形式,其中每个特定标签都有小数。下面是一个简化的例子:

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 长,我需要为它们分配唯一的随机颜色。

M.

【问题讨论】:

    标签: python matplotlib bar-chart colormap


    【解决方案1】:

    如果我理解得很好,这可能会有所帮助:

    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 的索引。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多