seaborn jointplot 中的两个横向分布是否可以使用非高斯核

is it possible to use a non gaussian kernel for the two lateral distributions in seaborn jointplot

我的数据如下:

s1 = sns.jointplot(data.columns[i], 
data.columns[j], 
data=data, 
space=0, color="b", stat_func=None)

如果我改用 kde

s1 = sns.jointplot(data.columns[i], 
    data.columns[j], 
    data=data, kind = 'kde',
    space=0, color="b", stat_func=None)

我对二维 kde 插值很满意,但对横向插值不太满意。问题都放在一起,实际上表明分布的最大值位于两个不同的点,这可能会产生误导。

现在真正的问题是:是否可以为两个横向分布指定不同于高斯的内核(蓝色)? (我知道高斯是二维中唯一的选择)。因为例如 'biw' (绿色)在美学上可能看起来更好(我仍然不相信从数学上讲,将使用不同内核完成的插值放在一起使它们看起来是同一件事在数学上是一件好事......) .所以我的问题是我是否可以在 sns.jointplot 中的某处指定不同的内核,或者是用另一个在第二时刻计算的内核覆盖横向分布的唯一方法。

ax1 = sns.distplot(data[data.columns[j]])
sns.kdeplot(data[data.columns[j]], kernel= 'biw', ax = ax1)

您可以为边缘图设置不同的内核:

s1 = sns.jointplot(data.columns[i], 
                   data.columns[j], 
                   data=data, kind = 'kde',
                   space=0, color="b", stat_func=None,
                   marginal_kws={"kernel":"biw"})  # like this

或者,如果您只想更改一个边缘图,您可以重新绘制它们:

s1.ax_marg_y.cla() # clear axis
sns.kdeplot(data.y, ax=s1.ax_marg_y, # choose the ax
            kernel="biw", # choose your kernel
            legend=0, # remove the legend
            vertical=True) # swap axis

vertical=True 允许您切换 x 和 y 轴,即如果您更改顶部边距图则不需要。