下面的代码给了我一个非常漂亮的小提琴图(以及其中的箱线图)。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
foo = np.random.rand(100)
sns.violinplot(foo)
plt.boxplot(foo)
plt.show()
到目前为止,一切都很好。然而,当我看到foo
,该变量不包含任何负值。这seaborn
这里的情节似乎有误导性。正常的 matplotlib 箱线图给出的结果更接近我的预期。
如何制作更适合的小提琴图(不显示假负值)?
正如评论所指出的,这是高斯 KDE 基础假设的结果(我不确定我是否会称其为“工件”)。正如已经提到的,这是不可避免的,如果您的数据不满足这些假设,您最好使用箱线图,它仅显示实际数据中存在的点。
然而,在您的回复中,您询问是否可以“更紧”,这可能意味着一些事情。
一种答案可能是改变平滑内核的带宽。你用bw
参数,实际上是一个比例因子;将使用的带宽是bw * data.std()
:
data = np.random.rand(100)
sns.violinplot(y=data, bw=.1)
另一个答案可能是在数据点的极值处截断小提琴。 KDE 仍将是fit密度超出数据范围,但不会显示尾部。你用cut
参数,指定应绘制超过密度极值的带宽单位。要截断,请将其设置为 0:
sns.violinplot(y=data, cut=0)
顺便说一句,APIviolinplot
is 将会改变 https://github.com/mwaskom/seaborn/pull/410在 0.6 中,我在这里使用的是开发版本,但是bw
and cut
参数存在于当前发布的版本中,并且行为方式大致相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)