python - 具有多个 Pandas DataFrame 的并排箱线图

标签 python pandas matplotlib boxplot

尽管本网站之前有一些很好的示例,但我无法在一个图中为多个 pandas DataFrame 生成并排框。

我尝试过这个:

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

df = pd.DataFrame({'A1':[9,16.2,8.1],'A2':[3.3,21.5,4.1],
                   'B1':[8,9.8,1.6],'B2':[10.8,2.2,3.6],
                   'C1':[1.3,2.8,1.6],'C2':[3.1,4.1,3.6],})

df1 = df.loc[:, 'A1':'A2']
df2 = df.loc[:, 'B1':'B2']
df3 = df.loc[:, 'C1':'C2']

fig = matplotlib.pyplot.boxplot(df1)
fig = matplotlib.pyplot.boxplot(df2)
fig = matplotlib.pyplot.boxplot(df3)
plt.show()

enter image description here

但我想要这样的东西:

enter image description here

此外,如果我可以将各个数据点显示为框中的点,那就太好了。因此,如果有人对此也有建议,那就太好了!

谢谢!

最佳答案

如果我理解正确的话,你想要 6 个箱线图,每组 3 个,每组 2 个(每组是 A/B/C,每组内有 1/2)?

您可以使用seabord相当轻松地实现所需的结果,但您必须首先以“长形式”重构您的数据框。 我首先使用pd.wide_to_long()使用标识子组 1/2 的新列将数据拆分为 3 个组 A/B/C,然后我进一步 melt生成的数据帧以获得长格式数据帧:

df = pd.DataFrame({'A1':[9,16.2,8.1],'A2':[3.3,21.5,4.1],
                   'B1':[8,9.8,1.6],'B2':[10.8,2.2,3.6],
                   'C1':[1.3,2.8,1.6],'C2':[3.1,4.1,3.6],})

df["id"] = df.index
df = pd.wide_to_long(df, stubnames=['A','B','C'], i='id', j='group').reset_index().drop('id', axis=1)
df = df.melt(id_vars='group')

生成的数据框现在是这样的:

    group   variable    value
0   1   A   9.0
1   1   A   16.2
2   1   A   8.1
3   2   A   3.3
4   2   A   21.5
5   2   A   4.1
6   1   B   8.0
7   1   B   9.8
8   1   B   1.6
9   2   B   10.8
10  2   B   2.2
11  2   B   3.6
12  1   C   1.3
13  1   C   2.8
14  1   C   1.6
15  2   C   3.1
16  2   C   4.1
17  2   C   3.6

使用 seaborn's boxplot 就很简单了生成绘图:

sns.boxplot(data=df, x='variable', y='value', hue='group')

enter image description here

如果您愿意,您可以在箱线图之上叠加群图以查看各个数据点

sns.boxplot(data=df, x='variable', y='value', hue='group')
sns.swarmplot(data=df, x='variable', y='value', hue='group', dodge=True, palette=['grey','grey'], s=10)

enter image description here

关于python - 具有多个 Pandas DataFrame 的并排箱线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56502290/

相关文章:

python - 如何使用 pandas 数据框有效更新 mysql 表?

python - Pandas DataFrame 乘法中的空行为

matplotlib - 如何在不扩展轴限制的情况下绘图?

python - 按散点图叠加回归线和 rsq 进行分组

python - Matplotlib 不适用于 LInux。无法加载后端 'TkAgg'

python - MongoDB - 如何将 ObjectId 和日期时间显示为字符串(使用 bson.json_util)

python - 在 python 中使用 mmap

python - 自动从csv文件中提取数据到特定的矩阵位置

python - 如何使类对象可迭代

python - Python pandas DataFrame中math.log的结果是整数