seaborn.boxplot 对于数据集的每个变量
seaborn.boxplot for each variable of a dataset
我正在使用 Wisconsin dataset。要显示 Y 轴是数据帧变量(例如:radius_mean)且 X 轴是诊断的箱线图,我执行以下操作:
sns.boxplot(x='label', y='radius', data=dsWisconsin)
(dsWisconsin 是从 .csv 加载 pandas 的数据框)
我的问题是,我怎样才能显示每个变量的所有箱线图(在网格中),而不是为每个变量执行前面的代码?
例如,类似这样的东西,但每个变量的箱线图来自威斯康星州:
提前致谢
如您所见,尽管可以将所有变量拟合在一个图中,但这并不是一种非常有用的可视化。因此,我建议你按照第二个例子,你得到 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()
df_1 = df.iloc[:, 1:-1]
n_rows = 5
col_start = 0
delta = 7
col_end = 0
for i in range(n_rows):
col_end = col_start + delta
df.iloc[:, col_start:col_end].plot(kind = 'box', subplots=True, sym='b.')
col_start += delta
plt.show()
您可以将数据转换为整齐的格式并使用 FacetGrid
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')
我正在使用 Wisconsin dataset。要显示 Y 轴是数据帧变量(例如:radius_mean)且 X 轴是诊断的箱线图,我执行以下操作:
sns.boxplot(x='label', y='radius', data=dsWisconsin)
(dsWisconsin 是从 .csv 加载 pandas 的数据框)
我的问题是,我怎样才能显示每个变量的所有箱线图(在网格中),而不是为每个变量执行前面的代码?
例如,类似这样的东西,但每个变量的箱线图来自威斯康星州:
提前致谢
如您所见,尽管可以将所有变量拟合在一个图中,但这并不是一种非常有用的可视化。因此,我建议你按照第二个例子,你得到 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()
df_1 = df.iloc[:, 1:-1]
n_rows = 5
col_start = 0
delta = 7
col_end = 0
for i in range(n_rows):
col_end = col_start + delta
df.iloc[:, col_start:col_end].plot(kind = 'box', subplots=True, sym='b.')
col_start += delta
plt.show()
您可以将数据转换为整齐的格式并使用 FacetGrid
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')