【发布时间】:2019-10-22 04:09:42
【问题描述】:
我有两个熊猫系列。它们每个都有五个索引,范围(“非常低”、“低”、“中”、“高”、“非常高”)。该系列是通过将数据框分成两个人口统计数据然后获取值计数以编程方式创建的一个特定的列。
这两个系列是通过采用 pandas 数据框创建的,根据每一行是否由特定人口统计添加,然后提取一列上的值计数。
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
是否有一种内置方式让我告诉 matplotlib,“我想要按此顺序排列的标签”并将标签传递给它?
【问题讨论】:
-
你能发布一个完整的例子吗? IE。使用一些与您的格式相同的虚拟数据,以便我们可以在我们端生成数字进行测试?
-
我编辑了问题以包含更多信息,因此您可以了解该系列是如何构建的,并且我包含了打印系列的结果。我通过手动循环解决了这个问题按我想要的顺序排列标签,我只是希望 matplotlib 有一些方法来指定饼图楔形的顺序。
标签: python pandas matplotlib