同一图上 Pandas 数据框多列的箱线图(seaborn)

Posted

技术标签:

【中文标题】同一图上 Pandas 数据框多列的箱线图(seaborn)【英文标题】:Boxplot of Multiple Columns of a Pandas Dataframe on the Same Figure (seaborn) 【发布时间】:2018-09-08 07:08:37 【问题描述】:

我觉得我可能没有想到一些显而易见的事情。我想在同一个图中放入数据框每一列的箱线图,在 x 轴上我有列的名称。在seaborn.boxplot() 中,每列都等于groupby

在熊猫中我会这样做

df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
df.boxplot()

产生

现在我想在 seaborn 中得到同样的东西。但是当我尝试sns.boxplot(df) 时,我只得到一个分组箱线图。如何在 seaborn 中重现相同的图形?

【问题讨论】:

【参考方案1】:

海洋生物的等价物

df.boxplot()

sns.boxplot(x="variable", y="value", data=pd.melt(df))

或者只是

sns.boxplot(data=df)

它将绘制任何一列数值,而不会将 DataFrame 从宽格式转换为长格式,使用 seaborn v0.11.1。这将创建一个图形,每列都有一个单独的箱线图。

带有melt的完整示例:

import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])

sns.boxplot(x="variable", y="value", data=pd.melt(df))

plt.show()

这是因为pd.melt 转换了宽格式数据帧

          A         B         C         D
0  0.374540  0.950714  0.731994  0.598658
1  0.156019  0.155995  0.058084  0.866176
2  0.601115  0.708073  0.020584  0.969910
3  0.832443  0.212339  0.181825  0.183405

长格式

   variable     value
0         A  0.374540
1         A  0.156019
2         A  0.601115
3         A  0.832443
4         B  0.950714
5         B  0.155995
6         B  0.708073
7         B  0.212339
8         C  0.731994
9         C  0.058084
10        C  0.020584
11        C  0.181825
12        D  0.598658
13        D  0.866176
14        D  0.969910
15        D  0.183405

【讨论】:

【参考方案2】:

您可以按照this question 中的建议使用内置的pandas 方法df.plot(kind='box')。 我知道如果您必须使用 seaborn,这个答案对您没有帮助,但它可能对要求更简单的人有用。

import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])

df.plot(kind='box')
plt.show()

【讨论】:

【参考方案3】:
plt.boxplot([df1,df2],   boxprops=dict(color='red'), labels=['title 1','title 2'])

【讨论】:

以上是关于同一图上 Pandas 数据框多列的箱线图(seaborn)的主要内容,如果未能解决你的问题,请参考以下文章

带有 pandas groupby multiindex 的箱线图,用于来自 multiindex 的指定子级别

同一图上的 Python 并排箱线图

matplotlib:每个类别的箱线图

使用熊猫的箱线图

带有 pandas、groupby、子图、计算/描述性统计、聚合的箱线图

同一图上的条形图/线图,但条形图前面的轴和线图不同