Seaborn:使用箱线图导致内存耗尽

4
我希望绘制三个箱线图,分别对应1、2和3的weight_cat值(这些是它唯一具有的不同值)。这些箱线图应显示身高随体重类别(weight_cat)的变化。
因此,我有这样一个数据框:
print data.head(5)

        Height    Weight  weight_cat
Index                                
1      65.78331  112.9925           1
2      71.51521  136.4873           2
3      69.39874  153.0269           3
4      68.21660  142.3354           2
5      67.78781  144.2971           2

下面的代码最终占用了我所有的内存。我认为这不正常:
Seaborn.boxplot(x="Height", y="weight_cat", data=data)

这里有什么问题吗?这是手册的链接。数据框的形状为(25000, 4)。这是csv文件的链接。
以下是获取相同数据的方法:
data = pd.read_csv('weights_heights.csv', index_col='Index')
def weight_category(weight):
    newWeight = weight
    if newWeight < 120:
        return 1

    if newWeight >= 150:
        return 3

    else:
        return 2

data['weight_cat'] = data['Weight'].apply(weight_category)

它真的在工作吗? - Pax Vobiscum
@Uzzee 不好意思,我是指 boxplot - Rocketq
调用 Seaborn.boxplot(x = data.Height, y = data.weight_cat) 会导致相同的问题。我相信这不是问题的原因。 - Rocketq
https://dev59.com/XV8d5IYBdhLWcg3woDcZ - Pax Vobiscum
你是在导入matplotlib.pyplot来完成这个任务吗?你使用的matplotlib版本是哪个? - Pax Vobiscum
显示剩余3条评论
1个回答

10

交换xy列的名称:

import seaborn as sns
sns.boxplot(x="weight_cat" y="Height", data=data)

目前,您正在尝试创建一个包含与不同高度值(即24503)相同数量的箱线图的图表。

对于您的数据,这对我有效:

enter image description here

编辑

如果您想水平显示箱线图,可以使用orient参数提供方向:

sns.boxplot(x='Height', y='weight_cat', data=data, orient='h')

请注意,在这种情况下,xy 标签被交换了(与您的问题中一样)。

1
@Rocketq,我已经更新了我的答案,并提供了一个水平方向的示例。如果您想要一个水平箱线图,请查看它。 - iulian
1
你也可以将 weight_cat 赋予分类数据类型,这样方向就可以自动推断出来。 - mwaskom
“x”/“y”交换提示对我非常重要!我花了半天时间调试我的脚本……谢谢! - jojek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接