在一个子图上绘制多索引数据帧分组内部级别

Plot multiindex dataframe groupping internal level on one subplot

我想在一个带有子批次的地块上绘制多索引数据框。

数据框示例

import datetime
import random
base = datetime.datetime.today()
numdays = 7
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]
df_plot = pd.DataFrame({"y": random.choices(range(0, 100), k=16 * numdays)},
   index=pd.MultiIndex.from_product(
    [["A", "B", "C", "D"],
     ["m1", "m2", 'm3', 'm4'], 
     date_list],
    names=["Group", "metric", "date"]))
df_plot.head()
Group   metric  date     y
A   m1  2022-02-02      18
        2022-02-01      47
        2022-01-31      2

我想在一个图中有四个子图,每个子图对应一组(A、B、C、D),每个子图有四行对应每个指标(m1、m2、m3、m4) . X 轴是日期,Y 轴是具有多索引的单列数据框中的单元格值(见上例)。

我知道可以通过按索引对数据帧进行分组来以多种方式完成绘图。

是否有像下面这样的一条命令的优雅解决方案?必须有四个辅助图,每个子图有四行。

df_plot.plot(..., subplots=True, layout=(2, 2))

您可以尝试在 groupby 之前重置索引,然后手动绘制成 pre-populated 轴网格:

df_plot = df_plot['y'].unstack('metric').reset_index('Group')
fig, axes = plt.subplots(2,2)

for ax, (group, data) in zip(axes.ravel(), df_plot.groupby('Group')):
    data.plot(ax=ax)

输出: