Seaborn jointplot -- 改变两个边际图的带宽

Seaborn jointplot -- change bandwidth of both marginal plots

我正在绘制双变量密度图,每个变量都有边际图。我发现结果太平滑了,所以我试图减少带宽。但是,当我尝试使用 bw 参数时,它只会更改 x 边际图。

是否有一种简单的方法来更改 x 和 y 边缘图的带宽?

g=sns.jointplot(x=xvar, y=yvar, kind='kde',marginal_kws=dict(bw=0.8),bw=0.8)

经过编辑以包含最小、完整且可验证的示例:

import numpy as np
import seaborn as sns

xvar=np.array([116.50977707, 109.72701878, 105.91984813, 113.02538624,
   103.55109174, 100.15785259, 107.38825146, 109.45129207,
   108.89834117, 106.92708597, 115.064564  , 118.95366874,
   119.12261328, 112.14829577, 109.55655108, 109.55153269,
   111.87437977, 113.36339938, 115.03919691, 117.74294792,
   116.64331381, 114.26784649, 110.84798784, 110.82523627,
   111.02645136, 111.09745379, 104.66428003, 113.06109725,
   130.98558215, 120.24449281, 116.44829344, 116.40788601,
   117.62966035, 117.48541624, 116.53918541, 114.8071558 ,
   118.16307757, 120.24443983, 119.36598316, 123.66011044,
   128.42447262, 127.73413555, 126.13632562, 120.71799274,
   111.61899034, 109.83950513, 116.83013682, 127.56377202,
   119.03429005, 119.30172001, 129.22945136, 156.44610336,
   177.50326117])

yvar=np.array([34.35938095, 34.34893182, 34.34228736, 34.35125287, 34.34405556,
   34.34164706, 34.348     , 34.34455172, 34.35189888, 34.36672093,
   34.36253488, 34.37637079, 34.39368966, 34.37162069, 34.36118182,
   34.35890909, 34.36709091, 34.37265909, 34.37910345, 34.38944828,
   34.38813483, 34.38753488, 34.39172093, 34.37977011, 34.36509091,
   34.34864773, 34.32751136, 34.348     , 34.39529412, 34.36282353,
   34.35110112, 34.34975   , 34.34838636, 34.34995455, 34.35348148,
   34.35940741, 34.3689011 , 34.37107955, 34.36085227, 34.37053191,
   34.38202128, 34.36244444, 34.36034091, 34.35625   , 34.34902273,
   34.34970455, 34.35513953, 34.36318182, 34.36454545, 34.36174419,
   34.36935556, 34.41802222, 34.44843396])

g=sns.jointplot(x=xvar, y=yvar, kind='kde',marginal_kws=dict(bw=0.8),bw=0.8)

如果你想要更多的控制,你必须直接使用JointGrid

iris = sns.load_dataset("iris")
g = sns.JointGrid(x="sepal_width", y="petal_length", data=iris, space=0)
g = g.plot_joint(sns.kdeplot, cmap="Blues_d")
sns.kdeplot(iris["sepal_width"], color="b", shade=True, bw=0.1, ax=g.ax_marg_x)
sns.kdeplot(iris["petal_length"], color="r", shade=True, bw=0.01, vertical=True, ax=g.ax_marg_y)