我有如下数据集:
df_plots = pd.DataFrame({'Group':['A','A','A','A','A','A','B','B','B','B','B','B'],
'Type':['X','X','X','Y','Y','Y','X','X','X','Y','Y','Y'],
'Value':[1,1.2,1.4,1.3,1.8,1.5,15,19,18,17,12,13]})
df_plots
Group Type Value
0 A X 1.0
1 A X 1.2
2 A X 1.4
3 A Y 1.3
4 A Y 1.8
5 A Y 1.5
6 B X 15.0
7 B X 19.0
8 B X 18.0
9 B Y 17.0
10 B Y 12.0
11 B Y 13.0
我希望创建按组
(此示例中有两个)分类的箱线图,并在每个图中按类型显示。 我已尝试:
fig, axs = plt.subplots(1,2,figsize=(8,6), sharey=False)
axs = axs.flatten()
for i, g in enumerate(df_plots[['Group','Type','Value']].groupby(['Group','Type'])):
g[1].boxplot(ax=axs[i])
- 由于循环尝试创建4个图,因此会导致
IndexError
错误。
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-12-8e1150950024> in <module>
3
4 for i, g in enumerate(df[['Group','Type','Value']].groupby(['Group','Type'])):
----> 5 g[1].boxplot(ax=axs[i])
IndexError: index 2 is out of bounds for axis 0 with size 2
然后我尝试了这个:
fig, axs = plt.subplots(1,2,figsize=(8,6), sharey=False)
axs = axs.flatten()
for i, g in enumerate(df_plots[['Group','Type','Value']].groupby(['Group','Type'])):
g[1].boxplot(ax=axs[i], by=['Group','Type'])
但是,我也遇到了同样的问题。期望的结果应该只有两个图,每个图上有每种类型的盒式图。这是这个想法的草图:
任何帮助都将不胜感激,通过这段代码,我可以控制一些无法使用 seaborn 控制的数据方面的内容。
by='Type'
与df_plots.groupby('Group').plot(kind='box', by='Type', figsize=(8, 6), layout=(1, 2), sharey=False)
似乎无法正确工作。 - Trenton McKinneymatplotlib.pyplot.boxplot
,但它无法处理“by”,而groupby.boxplot
会传递给DataFrame.boxplot
,后者可以处理“by”并将其余值传递给matplotlib.pyplot.boxplot
。 - Henry Ecker