Seaborn PairPlot 的正确对角线 Y 轴

Ser*_*rKo 2 python matplotlib seaborn

我正在尝试使用seabornpairplot进行一些可视化,并且我需要有正确的对角线Y轴(可见!),根本没有标准化(只是计数)或密度标准化(bin值的总和= 1)。更好的方法是什么?

这就是我正在尝试做的事情:

import numpy as np
import seaborn as sns
import pandas as pd

data = np.random.normal(0,2,[1000,3])

sss = sns.pairplot(pd.DataFrame(data),corner=True)
sss.axes[0][0].yaxis.tick_right()
sss.axes[0][0].get_yaxis().set_visible(True)
sss.axes[0][0].axis('on')
sss.axes[0][0].yaxis.set_label_position("right")
sss.axes[0][0].set_ylabel('Counts')
Run Code Online (Sandbox Code Playgroud)

它给了我下图:

在此输入图像描述

显然,我这里的归一化是错误的(可能是在最大值上归一化的)并且 y 轴线本身丢失了。

Diz*_*ahi 5

默认情况下,每行的 y 轴是共享的,对角线图的 y 轴本质上是没有意义的。

如果您想在那里绘制某些内容并保留您尝试绘制的数据的比例,那么您应该以某种方式“破坏”共享轴。我能想到的最简单的方法是使用在同一位置创建一个新轴twinx()

当然,为此您需要使用PairGrid()而不是pairplot()

import numpy as np
import seaborn as sns
import pandas as pd

def my_hist(x, label, color):
    ax0 = plt.gca()
    ax = ax0.twinx()
    
    sns.despine(ax=ax, left=True, top=True, right=False)
    ax.yaxis.tick_right()
    ax.set_ylabel('Counts')
    
    ax.hist(x, label=label, color=color)

data = np.random.normal(0,2,[1000,3])
df = pd.DataFrame(data)

g = sns.PairGrid(df,corner=True)
g.map_diag(my_hist)
g.map_lower(sns.scatterplot)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述