【问题标题】:Plot only some columns with seaborn pairplot仅使用 seaborn pairplot 绘制一些列
【发布时间】:2020-10-27 22:57:08
【问题描述】:

我正在研究这种糖尿病dataset,其中包含许多列。

通常,我可以使用此代码选择一些我需要的特定列:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure()
sns.pairplot(dataset_copy, vars=['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness'], hue = "Outcome", markers=["o", "s"])
plt.show()

如何使用幻灯片索引来选择列?因为我想绘制所有列,但它会返回很多难以看到的图。

我只想绘制前 3 列,然后是剩余的。

# Plot the first 3 columns
plt.figure()
sns.pairplot(dataset_copy[:, 1:3], hue = "Outcome", markers=["o", "s"])
plt.show()

# Plot the remain columns
plt.figure()
sns.pairplot(dataset_copy[, 3:], hue = "Outcome", markers=["o", "s"])
plt.show()

使用这段代码,我会得到这个错误:

TypeError: '(slice(None, None, None), slice(1, 3, None))' is an invalid key

更新: 使用iloc 方法得到这个错误:

plt.figure()
sns.pairplot(dataset_copy.iloc[:, 1:3], hue = "Outcome", markers=["o", "s"])
plt.show()

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    编辑:在更彻底地检查数据后,我了解到问题有点微妙,尤其是在可视化方面:虽然您想对您选择的列进行子集化,但由于您将传递到sns.pairplotdata 参数中,这些列必须 还包括“结果”,因此您可以根据此列改变配对图的色调/颜色。解决此问题的一种可能方法如下:

    
    # Plot the first 3 columns
    plt.figure()
    cols_to_plot = dataset_copy.columns[1:3].tolist() + ['Outcome'] # explicitly add the column "Outcome" to your list of columns to plot
    sns.pairplot(dataset_copy[cols_to_plot], hue ="Outcome", markers=["o", "s"])
    plt.show()
    
    # Plot the remain columns
    plt.figure()
    cols_to_plot = dataset_copy.columns[3:].tolist() # Take the remaining columns for the second plot; those already include "Outcome"
    sns.pairplot(dataset_copy[cols_to_plot], hue = "Outcome", markers=["o", "s"])
    plt.show()
    

    返回

    第一个图表。

    如果您不喜欢单独创建cols_to_plot 变量,您还可以执行以下操作:

    sns.pairplot(dataset_copy, vars = dataset_copy.columns[1:3], hue ="Outcome", markers=["o", "s"])
    

    有效地将整个数据框传递到 pairplot,但只选择绘制特定的列子集,作为列表传递到 vars 参数。


    原文:

    您上面的内容似乎是正确的。而不是

    dataset_copy[:, 1:3]
    

    使用

    dataset_copy.iloc[:, 1:3]
    

    发生错误是因为在使用方括号切片时,您可以或者要求获取行(例如df[0:5]以获取某些特定的列(例如@ 987654334@)。要同时按索引和列进行切片,您需要使用iloc(用于基于位置的索引)或loc(用于基于标签的索引)。更详细的解释见熊猫docs

    【讨论】:

    • 使用iloc 将使最后一列Outcome 得到KeyError
    • @huy 你完全正确!我编辑了答案以反映完整的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2020-06-24
    • 2018-03-29
    • 2021-10-15
    • 2016-12-30
    • 2023-03-08
    相关资源
    最近更新 更多