使用数字数据作为色调的seaborn中的堆叠条形图

2024-05-23 17:05:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由3列(月、金额、类别)组成的简单数据框架,其中每行代表某一类别的费用:

import pandas as pd

d = {'Month': ['Jan', 'Jan', 'Jan', 'Feb', 'Feb', 'Mar', 'Mar', 'Mar', 'Mar'], 'Amount': [5, 65, 29, 200, 28.5, 12, 4, 100, 21], 'Category': ['Travel', 'Food', 'Dentist', 'Dentist', 'Food', 'Travel', 'Food', 'Sport', 'Sport']}
df = pd.DataFrame(df)

我想创建一个seaborn条形图,其中每个条形图表示每月的总费用,每个条形图分为不同的颜色,其中每个色调表示该月特定类别的总费用

我能够使用非常复杂的方法和matplotlib绘图获得结果:

df = df.groupby(['Month', 'Category']).sum()   
df.reset_index(inplace=True)
pivot_df = df.pivot(index='Month', columns='Category', values='Amount')
df.plot.bar(stacked=True, colormap='tab20')

但这种方法在尝试使用seaborn时会出现错误,而且似乎不必要复杂

有没有更好的方法来达到预期的效果


Tags: 方法dffood类别amountmarjanfeb
1条回答
网友
1楼 · 发布于 2024-05-23 17:05:53

您的初始方法很复杂,因为您有不必要的步骤。您可以使用groupbypivot,但是使用pivot_table可以同时完成相同的聚合和重塑。从初始数据帧:

df_pivot = pd.pivot_table(df, index='Month', columns='Category', values='Amount', aggfunc='sum')
df_pivot.plot.bar(stacked=True, colormap='tab20')

enter image description here


至于使用seaborn,我不会。它们并不真正支持堆叠条形图,它们的所有示例look like stacked plots只有两个类别,它们在其中绘制总数,然后覆盖一个组(给人以堆叠的印象)。但这种方法不容易扩展到两组以上

但是,如果您想要seaborn feel,您可以使用它们的默认值

import seaborn as sns
sns.set()

df_pivot = pd.pivot_table(df, index='Month', columns='Category', values='Amount', aggfunc='sum')
df_pivot.plot.bar(stacked=True)

enter image description here

相关问题 更多 >