我有一个由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时会出现错误,而且似乎不必要复杂
有没有更好的方法来达到预期的效果
您的初始方法很复杂,因为您有不必要的步骤。您可以使用
groupby
和pivot
,但是使用pivot_table
可以同时完成相同的聚合和重塑。从初始数据帧:至于使用
seaborn
,我不会。它们并不真正支持堆叠条形图,它们的所有示例look like stacked plots只有两个类别,它们在其中绘制总数,然后覆盖一个组(给人以堆叠的印象)。但这种方法不容易扩展到两组以上但是,如果您想要seaborn feel,您可以使用它们的默认值
相关问题 更多 >
编程相关推荐