Python Matplotlib 按类别和聚合划分子图

Python Matplotlib bars subplots by Category and Aggregation

我有一个 table 这样的:

data = {'Category':["Toys","Toys","Toys","Toys","Food","Food","Food","Food","Food","Food","Food","Food","Furniture","Furniture","Furniture"], 
        'Product':["AA","BB","CC","DD","SSS","DDD","FFF","RRR","EEE","WWW","LLLLL","PPPPPP","LPO","NHY","MKO"],
       'QTY':[100,200,300,50,20,800,300,450,150,320,400,1000,150,900,1150]}
df = pd.DataFrame(data)
df

输出:

    Category    Product QTY
0   Toys          AA    100
1   Toys          BB    200
2   Toys          CC    300
3   Toys          DD    50
4   Food          SSS   20
5   Food          DDD   800
6   Food          FFF   300
7   Food          RRR   450
8   Food          EEE   150
9   Food          WWW   320
10  Food          LLLLL 400
11  Food          PPPPP 1000
12  Furniture     LPO   150
13  Furniture     NHY   900
14  Furniture     MKO   1150

所以,我需要像这样制作条形子图(每个类别中的总和产品):

我的问题是我不知道如何组合类别、系列和聚合。 我设法将它们分成 3 个子图(1 个始终保持空白)但我无法将它们联合起来 ...

import matplotlib.pyplot as plt

fig, axarr = plt.subplots(2, 2, figsize=(12, 8))

df['Category'].value_counts().plot.bar(
    ax=axarr[0][0], fontsize=12, color='b'
)
axarr[0][0].set_title("Category", fontsize=18)

df['Product'].value_counts().plot.bar(
    ax=axarr[1][0], fontsize=12, color='b'
)
axarr[1][0].set_title("Product", fontsize=18)

df['QTY'].value_counts().plot.bar(
    ax=axarr[1][1], fontsize=12, color='b'
)
axarr[1][1].set_title("QTY", fontsize=18)

plt.subplots_adjust(hspace=.3)
plt.show()

出局

我需要添加什么来组合它们?

使用 seabornFacetGrid

会容易得多
import  pandas as pd
import seaborn as sns

data = {'Category':["Toys","Toys","Toys","Toys","Food","Food","Food","Food","Food","Food","Food","Food","Furniture","Furniture","Furniture"], 
        'Product':["AA","BB","CC","DD","SSS","DDD","FFF","RRR","EEE","WWW","LLLLL","PPPPPP","LPO","NHY","MKO"],
       'QTY':[100,200,300,50,20,800,300,450,150,320,400,1000,150,900,1150]}
df = pd.DataFrame(data)

g = sns.FacetGrid(df, col='Category', sharex=False, sharey=False, col_wrap=2, height=3, aspect=1.5)
g.map_dataframe(sns.barplot, x='Product', y='QTY')