具有连续色调的 Seaborn 配对图?

noo*_*oob 6 python visualization pandas seaborn

我如何为我的 seaborn pairplots 引入连续的色调?

我正在传递一个 Pandas 数据框train_df,以便可视化多个特征之间的关系。

但是,我还想添加一个色调,该色调将使用其相应的目标值target_df. 这些目标值是连续的(~在 10 和 100 之间浮动)。

我已经定义了一个sns.color_palette("RdGr")我想使用的。

现在我有以下配对图(没有色调):

sns.pairplot(train_df)
Run Code Online (Sandbox Code Playgroud)

如何使用上面定义的调色板将 target_df 作为色调传递?

提前谢谢了。

mwa*_*kom 6

pairplot(好吧,底层PairGrid)现在委托hue给映射的函数(如果它支持的话)。不过,您可能不想为每个价格绘制不同的边际密度:

diamonds = sns.load_dataset("diamonds")
sns.pairplot(
    diamonds,
    hue="price", vars=["carat", "depth", "table"], 
    diag_kws=dict(color=".2", hue=None)
)
Run Code Online (Sandbox Code Playgroud)

旧答案,对于演示更灵活的使用很有用PairGrid

这可能比现在更容易,但没有必要重新创建PairGrid自己。

diamonds = sns.load_dataset("diamonds")
g = sns.PairGrid(diamonds, vars=["carat", "depth", "table"])
g.map_diag(sns.kdeplot, color=".2")
g.map_offdiag(sns.scatterplot, hue=diamonds["price"], s=5, linewidth=0)
g.axes[1, -1].legend(loc="center left", bbox_to_anchor=(.7, .5))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Qua*_*ang 4

您可以将 指定target_df为一列train_df并将其传递为hue

sns.pairplot(data=train_df.assign(target=target_df, 
                                  hue='target')
Run Code Online (Sandbox Code Playgroud)

target然而,如果你是连续的,这将非常慢。相反,您可以执行双for循环:

num_features = len(train_df.columns)
fig,ax = plt.subplots(num_features, num_features, figsize=(10,10))
for i in train_df.columns:
    for j in train_df.columns:
        if i==j:    # diagonal
            sns.distplot(train_df[0], kde=False, ax=ax[i][j])
        else:       # off diagonal
            sns.scatterplot(x=train_df[i],y=train_df[j], 
                            ax=ax[i][j], hue=target_df, palette='BrBG',
                            legend=False)
Run Code Online (Sandbox Code Playgroud)

这给了你这样的东西:

在此输入图像描述