首页 > 解决方案 > 如何更改堆叠 pyplot 图表的列颜色以指示另一列是真还是假?

问题描述

这是数据框中的一些示例数据

Country      restricted  V1%      V2%
0   Algeria  True    39.575812    60.424188
1   Angola   True    56.931682    43.068318
2   Argent   False    15.555556   84.4444

我正在使用堆积条形图来显示 3 个值。V1 和 V2 已被标准化为 %ges,因此创建基本图表很简单,如下所示:

xx=df.plot(kind="bar", x='Country',stacked=True,figsize=(20,10);

之前订购了数据框

df=conjoint_ag_df.sort_values(['restricted',.Country'], ascending=[False,True])

以便按国家和真/假值显示。

这给了我一个像这样的基本显示。

在此处输入图像描述

我想要做的是安排所有具有真值的列在限制中具有一个颜色对,而那些具有假的列具有另一个颜色对 - 因为我首先按限制进行排序,这意味着颜色将从前者到后者沿图表的 x 轴。我可以按照这个示例对简单的条形图执行此操作

基于值的彩色matplotlib条形图

和使用这个的一对颜色

xx=_df.plot(kind="bar", x='Country',stacked=True,figsize=(20,10),color=['r','b'])

(可怕)但我不知道如何将微分器应用于列,以根据 True False 值将两个颜色值更改为两个不同的值。

标签: pythonpandasmatplotlibcolorsbar-chart

解决方案


可能有更好的方法,但这里是使用循环的方法:

for idx, row in df.iterrows():
    color = ['tab:blue', 'tab:orange'] if row['restricted'] else ['tab:blue', 'tab:red']
    plt.bar(row['Country'], row['V1%'], color=color[0])
    plt.bar(row['Country'], row['V2%'], bottom=row['V1%'], color=color[1])

输出:

在此处输入图像描述


推荐阅读