Python:基于同一DF中多列值的堆积条形图[重复]

Posted

技术标签:

【中文标题】Python:基于同一DF中多列值的堆积条形图[重复]【英文标题】:Python: Stacked bar plot based on values from multiple columns within the same DF [duplicate] 【发布时间】:2021-12-11 21:34:25 【问题描述】:

假设我们有一个像下面这样的 DF:

channel     store         product  orders
offline     Swindon       webcam   97
offline     Kettering     webcam   28
offline     Swindon       ebook    55
offline     Kettering     ebook    77
offline     Swindon       tablet   122
offline     Kettering     tablet   81
online      Swindon       webcam   252
online      Kettering     webcam   111
online      Swindon       ebook    81
online      Kettering     ebook    244
online      Swindon       tablet   361
online      Kettering     tablet   49

我的目标是绘制一个带有 4 个堆叠条形图(每个商店和渠道组合一个),显示每种产品在每个产品中的销售百分比。

【问题讨论】:

Code and Plot 根据副本 【参考方案1】:

您可以从channelstore 创建列,然后用seaborn 绘制barplot,如下所示:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame(
    'channel': ['offline', 'offline', 'offline', 'offline', 'offline', 'offline', 'online' , 'online' ,'online' ,'online' ,'online' ,'online' ,],
    'store': ['Swindon', 'Kettering', 'Swindon', 'Kettering','Swindon', 'Kettering','Swindon', 'Kettering','Swindon', 'Kettering','Swindon', 'Kettering',],
    'product': ['webcam', 'webcam', 'ebook', 'ebook', 'tablet' , 'tablet' , 'webcam' , 'webcam' , 'ebook' , 'ebook' , 'tablet' , 'tablet'],
    'orders': [97,28,55,77,122,81,252,111,81,244,361,49],
)

df['Channel&Store'] = df.apply(lambda row: f'row[0] row[1]', axis=1)

sns.barplot(x="Channel&Store", y="orders" , hue = 'product', data=df)
plt.show()

输出:

【讨论】:

【参考方案2】:

最简单的方法是先创建一个数据透视表,然后绘制它:

df.pivot_table(index=["channel", "store"], columns='product', values='orders', aggfunc='sum').plot(kind='bar', stacked=True)

事实上,你甚至不需要pivot_table,因为不需要对数据进行任何计算,所以你可以像这样重新排序表格:

df.pivot(index=["channel", "store"], columns='product', values='orders').plot(kind='bar', stacked=True)

并且会收到相同的结果。

【讨论】:

以上是关于Python:基于同一DF中多列值的堆积条形图[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何重命名 plotly express 堆积条形图的图例元素?

Pandas - 绘制堆积条形图

python中堆积百分比条形图的问题[重复]

Python Pandas 中的聚集堆积条形图 [关闭]

ZingChart:具有一系列空值的堆积条形图

使用 matplotlib 绘制堆积条形图,保持 pandas 数据框的顺序,因为它使用 python