首页 > 解决方案 > 在 Matplotlib 中 groupby 之后的 Python 并排箱线图

问题描述

需要进行分组并并排打印 2 个箱线图。在下面的示例中,我需要通过按 B 列对 A 列的值进行分组来绘制 A 列的箱线图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10,1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
for n, grp in df.groupby('B'):
   plt.boxplot(x='A',data=grp)

电流输出在此处输入图像描述

所需的输出 - 类似: 在此处输入图像描述

标签: python-3.xpandasmatplotlibgroup-byboxplot

解决方案


您可以在调用中添加一个位置以plt.boxplot()避免箱线图在同一位置绘制两次:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
for n, grp in df.groupby('B'):
    plt.boxplot(x='A', data=grp, positions=[n])
plt.xticks([1, 2], ['Label 1', 'Label 2'])
plt.show()

来自 groupby 的箱线图

或者你可以使用 seaborn 让分组。您可以替换列中的数字以具有标签。

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

df = pd.DataFrame(np.random.rand(10, 1), columns=['A'])
df['B'] = [1, 2, 1, 1, 1, 2, 1, 2, 2, 1]
df['B'] = df['B'].replace({1: 'Label 1', 2: 'Label 2'})
sns.boxplot(data=df, x='B', y='A' )
plt.show()

海运箱线图


推荐阅读