我的图形只有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)
都让我
在我上面的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**))
在这里我被困住了-我该如何设置标签,以便胜利始终是绿色,失败总是红色,领带是灰色?
答案 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')
# pass the dataframe column values
gb.plot.barh(stacked=True, color=color_for_label(gb.columns.values))