熊猫Matplotlib的颜色问题-图形颜色不一致

时间:2019-02-25 03:22:57

标签: pandas matplotlib

我的图形只有3种颜色-值A,B,C的绿色,红色,灰色。该应用程序使用分组和值计数来获取跨月的A,B和C的累积计数,并显示一个甜甜圈图表,barh和条形图。颜色从一个图形到另一个图形-在一个颜色上,A是绿色,在另一个具有相同数据的图形上,A显示为红色。

简单修复,对吧?

def color_for_label(label):
    xlate = {'A': 'green',
             'B': 'red',
             'C': 'grey',
             }
    return [xlate[x] for x in label]


chart = gb.unstack(level=-1)
               .plot.barh(color=color_for_label(gb.index[0:2].names), 
                width=.50,
                stacked=True, 
                legend=None)  

数据有时返回索引,而其他时候则返回多索引。它会阻塞并在

上起作用

颜色是恒定的红色/绿色/灰色,始终与值A / B / C一致。

我已经尝试检查数据类型和try / except结构,但是两者都变得太复杂了。任何人都可以分享一个简单的解决方案?

让我们使用此示例pandas pivot table to stacked bar chart

中的数据

df.assign(count = 1).groupby(['battle_type'])。count()。plot.barh(stacked = True)

并且(以后最好-我不喜欢groupby不一致的地方)

df.pivot_table(index='battle_type', columns='attacker_outcome', aggfunc='size').plot.barh(stacked=True)

都让我

enter image description here

在我上面的A,B,C的示例中,我有第三个值“ Tie”,但现在暂时忽略它。

我想确保胜利永远是绿色,失败总是红色,领带是灰色。

所以我有简单的功能

def color_for_label(label):
    xlate = {'win': 'green',
             'lose': 'red',
             'Tie': 'grey',
             }
return xlate[label]

所以我添加

.... plot.barh(stacked=True, color=color_for_label(**label**))

在这里我被困住了-我该如何设置标签,以便胜利始终是绿色,失败总是红色,领带是灰色?

1 个答案:

答案 0 :(得分:1)

知道了!

首先,为新示例翻译颜色

def color_for_label(label):
    xlate = {'win': 'green',
             'loss': 'red',
             'tie': 'grey',
             }
    return [xlate[x] for x in label]

然后将其分为两行。

# create a dataframe
gb = df.pivot_table(index='battle_type', columns='attacker_outcome', aggfunc='size')

enter image description here

# pass the dataframe column values
gb.plot.barh(stacked=True, color=color_for_label(gb.columns.values))

enter image description here