繁体   English   中英

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

[英]Stacked barplot in seaborn using numeric data as hue

我有一个简单的 pandas dataframe 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 条 plot ,其中每个条代表每月的费用总额,每个条被分成不同的颜色,其中每个色调代表该月特定类别的总费用。

我能够使用非常复杂的方法和使用 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时会报错,看起来没有必要复杂。

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

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

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

在此处输入图像描述


至于使用seaborn ,我不会。 他们并不真正支持堆叠条形图,并且所有看起来像堆叠图的示例只有两个类别,其中它们的总数为 plot,然后覆盖一组(给人的印象是堆叠的)。 但这种方法不容易扩展到超过 2 组。

但是如果你想要seaborn 感觉你可以使用他们的默认值。

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)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM