matplotlib Sns.Pairplot?中Hist()的布局超参数的等效性

n6lpvg4x  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(130)

我试图找到hist()figsizesns.pairplot()layout参数。
我有一个pairplot,它可以在X和y之间提供很好的散点图。但是,它是水平方向的,没有等效的layout参数来使它们垂直于我的知识。每行4个散点图会很好。
这是我当前的sns.pairplot():

sns.pairplot(X_train,
  x_vars = X_train.select_dtypes(exclude=['object']).columns,
  y_vars = ["SalePrice"])

这是我希望它看起来像:来源

num_mask = train_df.dtypes != object
num_cols = train_df.loc[:, num_mask[num_mask == True].keys()]
num_cols.hist(figsize = (30,15), layout = (4,10))
plt.show()

1hdlvixo

1hdlvixo1#

sns.pairplot目前还不支持您想要实现的功能,但您可以使用其他图形级函数(sns.displotsns.catplot ...)。sns.lmplot创建散点图网格。要实现此功能, Dataframe 需要是“长格式”。
这里有一个简单的例子。sns.lmplot有一些参数可以省略回归线(fit_reg=False),设置单个子区的高度(height=...),设置其纵横比(aspect=...,其中子区宽度将是高度乘以纵横比),等等。如果所有的y范围都相似,您可以使用默认的sharey=True

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

# create some test data with different y-ranges
np.random.seed(20230209)
X_train = pd.DataFrame({"".join(np.random.choice([*'uvwxyz'], np.random.randint(3, 8))):
                            np.random.randn(100).cumsum() + np.random.randint(100, 1000) for _ in range(10)})
X_train['SalePrice'] = np.random.randint(10000, 100000, 100)

# convert the dataframe to long form
# 'SalePrice' will get excluded automatically via `melt`
compare_columns = X_train.select_dtypes(exclude=['object']).columns
long_df = X_train.melt(id_vars='SalePrice', value_vars=compare_columns)

# create a grid of scatter plots
g = sns.lmplot(data=long_df, x='SalePrice', y='value', col='variable', col_wrap=4, sharey=False)
g.set(ylabel='')
plt.show()

下面是另一个示例,其中包含mpg数据集的直方图:

import matplotlib.pyplot as plt
import seaborn as sns

mpg = sns.load_dataset('mpg')

compare_columns = mpg.select_dtypes(exclude=['object']).columns
mpg_long = mpg.melt(value_vars=compare_columns)
g = sns.displot(data=mpg_long, kde=True, x='value', common_bins=False, col='variable', col_wrap=4, color='crimson',
                facet_kws={'sharex': False, 'sharey': False})
g.set(xlabel='')
plt.show()

相关问题