绘制堆叠数据框
Plotting a stacked dataframe
我想使用 pandas.DataFrame.plot.bar(stacked=True) 功能来可视化我的数据框(见下方标题)。
选择 1 个时间段,我希望每个 "Wave" 的 "num" 堆叠在 "Electrodes" 中。理想情况下,每个时期都将绘制在一个单独的子图中。当前代码:
one = df[df["Period"]=="1"]
one.plot.bar(stacked=True);
plt.show()
在下面的示例中,这意味着 a、b、c、d 代表不同的波,0-9 代表不同的电极。
我认为 re-ordering 我的数据框与 plot.bar 的期望有关,但我不确定如何进行。
这是 DataFrame 的前 30 行
Electrode Period Wave num
0 7 10 Beta 1
1 8 12 Beta 1
2 15 10 High gamma 1
3 4 10 Theta 1
4 11 4 High gamma 1
5 12 13 High gamma 3
6 11 4 Delta 3
7 11 4 Theta 0
8 14 0 Delta 2
9 14 1 Beta 0
10 11 6 Low gamma 1
11 1 9 Theta 0
12 8 1 Theta 0
13 5 8 Theta 0
14 10 0 Low gamma 2
15 13 12 Alpha 1
16 8 13 Alpha 1
17 10 0 Beta 1
18 7 5 Alpha 2
19 10 3 Theta 0
20 14 6 High gamma 2
21 4 11 Beta 1
22 4 5 Delta 1
23 4 10 High gamma 2
24 10 0 High gamma 3
25 12 4 Alpha 1
26 8 8 Theta 0
27 8 11 Beta 1
28 6 2 Delta 2
29 12 7 Low gamma 3
我认为需要 groupby
and aggregate mean
with unstack
进行重塑:
one = df[df["Period"]==10].groupby(['Electrode','Wave'])['num'].mean().unstack()
one.plot.bar(stacked=True)
对于所有子图:
grouped = df.groupby('Period')
nrows = int(math.ceil(len(grouped)/2.))
fig, axs = plt.subplots(nrows,2, figsize=(12,30))
for (name, df), ax in zip(grouped, axs.flat):
df.groupby(['Electrode','Wave'])['num'].mean().unstack().plot.bar(stacked=True, ax=ax)
根据 jezrael 的错误提示,我找到了这个解决方案:
df[df["Period"]=="1"].pivot_table(values="num", index=["Electrode"], columns="Wave", aggfunc='mean').plot.bar(stacked=True)
我想使用 pandas.DataFrame.plot.bar(stacked=True) 功能来可视化我的数据框(见下方标题)。
选择 1 个时间段,我希望每个 "Wave" 的 "num" 堆叠在 "Electrodes" 中。理想情况下,每个时期都将绘制在一个单独的子图中。当前代码:
one = df[df["Period"]=="1"]
one.plot.bar(stacked=True);
plt.show()
在下面的示例中,这意味着 a、b、c、d 代表不同的波,0-9 代表不同的电极。
我认为 re-ordering 我的数据框与 plot.bar 的期望有关,但我不确定如何进行。
这是 DataFrame 的前 30 行
Electrode Period Wave num
0 7 10 Beta 1
1 8 12 Beta 1
2 15 10 High gamma 1
3 4 10 Theta 1
4 11 4 High gamma 1
5 12 13 High gamma 3
6 11 4 Delta 3
7 11 4 Theta 0
8 14 0 Delta 2
9 14 1 Beta 0
10 11 6 Low gamma 1
11 1 9 Theta 0
12 8 1 Theta 0
13 5 8 Theta 0
14 10 0 Low gamma 2
15 13 12 Alpha 1
16 8 13 Alpha 1
17 10 0 Beta 1
18 7 5 Alpha 2
19 10 3 Theta 0
20 14 6 High gamma 2
21 4 11 Beta 1
22 4 5 Delta 1
23 4 10 High gamma 2
24 10 0 High gamma 3
25 12 4 Alpha 1
26 8 8 Theta 0
27 8 11 Beta 1
28 6 2 Delta 2
29 12 7 Low gamma 3
我认为需要 groupby
and aggregate mean
with unstack
进行重塑:
one = df[df["Period"]==10].groupby(['Electrode','Wave'])['num'].mean().unstack()
one.plot.bar(stacked=True)
对于所有子图:
grouped = df.groupby('Period')
nrows = int(math.ceil(len(grouped)/2.))
fig, axs = plt.subplots(nrows,2, figsize=(12,30))
for (name, df), ax in zip(grouped, axs.flat):
df.groupby(['Electrode','Wave'])['num'].mean().unstack().plot.bar(stacked=True, ax=ax)
根据 jezrael 的错误提示,我找到了这个解决方案:
df[df["Period"]=="1"].pivot_table(values="num", index=["Electrode"], columns="Wave", aggfunc='mean').plot.bar(stacked=True)