我希望在seaborn distplot中有一个权重选项,类似于numpy直方图中的权重选项。如果没有此选项,唯一的替代方法是将权重应用于输入数组,这可能会导致不切实际的大小(和时间)。
答案 0 :(得分:2)
正如@vlasisla在其答案中已经提到的那样,应通过关键字参数hist_kws
提供权重,以便将权重传递给mathpolotlib的hist
函数。但是,除非同时禁用kde
(内核密度估计)选项,否则这不会起作用。这段代码实际上会产生预期的效果:
sns.distplot(x, hist_kws={'weights': x_weights}, kde=False)
要了解为什么不允许同时使用权重和kde,请考虑以下示例,其中x_weights
的计算方式为x_weights = np.ones_like(x) / len(x)
,以便所有垃圾箱的高度总和为1:
# generate 1000 samples from a normal distribution
np.random.seed(8362)
x = np.random.normal(size=1000)
# calculate weights
x_weights = np.ones_like(x) / len(x)
# figure 1 - use weights
sns.distplot(x, hist_kws={'weights': x_weights}, kde=False)
# figure 2 - default plot with kde
sns.distplot(x)
Figure 1. Using dist with weights and not KDE Figure 2. Using dist with default parameters
在图1中,我们为dist
函数提供了权重,因此在此图中,所有垃圾箱的高度总和为1 。在图2中,启用了dist
的默认行为,因此 KDE函数下的面积之和为1 ,并且相应地标准化了垃圾箱的高度。现在可以很容易地看出,在提供权重时绘制KDE确实没有多大意义。