Python 在 Matplotlib 中分组后的并排箱线图

Python Side by side box plots after groupby in Matplotlib

需要进行分组并并排打印 2 个箱线图。在下面的示例中,我需要通过按 B 列对其值进行分组来绘制 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)

当前输出

所需的输出 - 类似于:

您可以在对 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()

或者你可以使用 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()