gpt4 book ai didi

matplotlib - 当输入是DataFrame时,将框图分组在seaborn中

转载 作者:行者123 更新时间:2023-12-03 12:09:23 25 4
gpt4 key购买 nike

我打算在pandas dataframe中绘制多个列,并使用groupby内的seaborn.boxplot将所有列按另一列分组。对于matplotlib matplotlib: Group boxplots中的类似问题,这里有一个很好的答案,但考虑到seaborn.boxplot附带groupby选项,我认为在seaborn中执行此操作可能会容易得多。

这里,我们给出了一个失败的可重现示例:

import seaborn as sns
import pandas as pd
df = pd.DataFrame(
[
[2, 4, 5, 6, 1],
[4, 5, 6, 7, 2],
[5, 4, 5, 5, 1],
[10, 4, 7, 8, 2],
[9, 3, 4, 6, 2],
[3, 3, 4, 4, 1]
], columns=['a1', 'a2', 'a3', 'a4', 'b'])

#Plotting by seaborn
sns.boxplot(df[['a1','a2', 'a3', 'a4']], groupby=df.b)

我得到的是完全忽略 groupby选项的东西:

而如果我用一个列执行此操作,则要感谢另一个SO问题 Seaborn groupby pandas Series:
sns.boxplot(df.a1, groupby=df.b)

因此,我想将所有列都放在一个图中(所有列的比例相似)。

编辑:

上面的SO问题已经过编辑,现在包括对这个问题的“不干净”答案,但是如果有人对这个问题有一个更好的主意,那就太好了。

最佳答案

您可以直接使用boxplot(我想当问这个问题时,那是不可能的,但是seaborn版本> 0.6可以)。

正如@mwaskom所解释的,您必须将样本数据帧“融化”为“长格式”,其中每一列都是变量,每一行都是观察值:

df_long = pd.melt(df, "b", var_name="a", value_name="c")

然后,您可以将其绘制:
sns.boxplot(x="a", hue="b", y="c", data=df_long)

plot obtained with boxplot

关于matplotlib - 当输入是DataFrame时,将框图分组在seaborn中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25284859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com