Python 数据集每个变量的seaborn.boxplot

Python 数据集每个变量的seaborn.boxplot,python,seaborn,boxplot,Python,Seaborn,Boxplot,我在和警察一起工作。要显示一个方框图,其中Y轴是数据帧的变量(例如:radius_mean),X轴是诊断,请执行以下操作: sns.boxplot(x='label', y='radius', data=dsWisconsin) (dsWisconsin是从.csv加载熊猫的数据帧) 我的问题是,如何显示每个变量的所有箱线图(在网格中),而不是为每个变量执行前面的代码 例如,类似这样的东西,但带有威斯康星州每个变量的箱线图: 如您所见,尽管可以在一个绘图中拟合所有变量,但这并不是一个非常有用

我在和警察一起工作。要显示一个方框图,其中Y轴是数据帧的变量(例如:radius_mean),X轴是诊断,请执行以下操作:

sns.boxplot(x='label', y='radius', data=dsWisconsin)
(dsWisconsin是从.csv加载熊猫的数据帧)

我的问题是,如何显示每个变量的所有箱线图(在网格中),而不是为每个变量执行前面的代码

例如,类似这样的东西,但带有威斯康星州每个变量的箱线图:


如您所见,尽管可以在一个绘图中拟合所有变量,但这并不是一个非常有用的可视化。因此,我建议您遵循第二个示例,其中您得到5个数字,每个数字有7个子图

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

df = pd.read_csv('C:\wisconsin.csv', index_col=0)

n_rows = 5
n_cols = 6
count = 0
col_num = 1

plt.subplots(n_rows, n_cols)
for i in range(n_rows):
    for j in range(n_cols):
        plt.subplot(n_rows, n_cols, count+1)
        sns.boxplot(df.iloc[:, col_num], orient='vertical')
        if col_num < df.shape[1] :
            count += 1
            col_num += 1

plt.show()

您可以将数据转换为整洁的格式,并使用
FaceGrid

df = df.melt(id_vars=['id', 'diagnosis'])
df[:3]
#          id diagnosis     variable  value
# 0    842302         M  radius_mean  17.99
# 1    842517         M  radius_mean  20.57
# 2  84300903         M  radius_mean  19.69

cols = ['radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean']
grid = sns.axisgrid.FacetGrid(df[df.variable.isin(cols)], col='variable', sharey=False)
grid.map(sns.boxplot, 'diagnosis','value')

df = df.melt(id_vars=['id', 'diagnosis'])
df[:3]
#          id diagnosis     variable  value
# 0    842302         M  radius_mean  17.99
# 1    842517         M  radius_mean  20.57
# 2  84300903         M  radius_mean  19.69

cols = ['radius_mean', 'texture_mean', 'perimeter_mean', 'area_mean']
grid = sns.axisgrid.FacetGrid(df[df.variable.isin(cols)], col='variable', sharey=False)
grid.map(sns.boxplot, 'diagnosis','value')