seaborn distplot的权重选项?

时间:2015-07-29 14:17:48

标签: python matplotlib histogram seaborn

我希望在seaborn distplot中有一个权重选项,类似于numpy直方图中的权重选项。如果没有此选项,唯一的替代方法是将权重应用于输入数组,这可能会导致不切实际的大小(和时间)。

1 个答案:

答案 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确实没有多大意义。