是否有一种简单的方法来确保两个具有相同索引的熊猫系列的两个饼图以相同顺序绘制?

时间:2019-10-21 19:02:52

标签: python pandas matplotlib

我有两个大熊猫系列。它们每个都有五个索引,范围(“非常低”,“低”,“中”,“高”,“非常高”)。该系列是通过将一个数据框架分为两个人口统计然后获取价值计数而以编程方式创建的特定的列。

这两个系列的创建是通过获取一个熊猫数据框,根据每一行是否由特定的人口统计信息添加而划分,并提取一列的值计数。

demog1, demog2 = (df[df.Demographic == 'demog'], df[df.Demographic != 'demog'])
save_pie_chart(demog1, 'Column Name', 'demog1.png')
save_pie_chart(demog2, 'Column Name', 'demog2.png')

当我从该系列创建饼图时,每个饼图的索引都放置在不同的位置和颜色。我想确保两次它们具有相同的相对位置和相同的颜色。

我正在使用的当前方法是手动排序标签和数据,如下所示:

def save_pie_chart(df, col, path):
    series = df[col].value_counts()
    if 'Medium' in series.index:
        labels = []
        sizes = []
        for label in ['Very low', 'Low', 'Medium', 'High', 'Very high']:
            labels.append(label)
            sizes.append(series[label])
        series = sizes
    else:
        labels = series.keys()
    fig, ax = plt.subplots()
    ax.pie(series, labels=labels, autopct='%1.0f%%')
    ax.axis('equal')
    fig.savefig(path)

在上面,如果我在提取值计数后打印出series变量,则会得到以下输出:

Low          15
Very high    14
Very low     11
Medium       11
High         10
Name: Column Name, dtype: int64
High         95
Low          89
Medium       85
Very low     85
Very high    85
Name: Column Name, dtype: int64

first pie chart second pie chart

我是否有一种内置的方式告诉matplotlib:“我要按此顺序排列标签”,然后将标签传递给它?

1 个答案:

答案 0 :(得分:1)

您可以使用value_counts(sort=False)df.plot.bar

axes = (df.groupby('Demographic')['Medium'].value_counts()
   .unstack('Demographic')
   .plot.pie(subplots=True, autopct='%1.0f%%')
)

for ax in axes: ax.get_legend().remove()

输出:

enter image description here