Свен показал, как использовать класс gaussian_kde
из Scipy, но вы заметите, что он не совсем похож на то, что вы сгенерировали с помощью R. Это потому, что gaussian_kde
пытается автоматически определить полосу пропускания. Вы можете играть с пропускной способностью таким образом, изменяя функцию covariance_factor
из gaussian_kde
класса. Во-первых, вот что вы получите без изменения этой функции:
Однако, если я использую следующий код:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
data = [1.5]*7 + [2.5]*2 + [3.5]*8 + [4.5]*3 + [5.5]*1 + [6.5]*8
density = gaussian_kde(data)
xs = np.linspace(0,8,200)
density.covariance_factor = lambda : .25
density._compute_covariance()
plt.plot(xs,density(xs))
plt.show()
я получил
что довольно близко к тому, что вы получаете от Р. Что я наделал? gaussian_kde
использует изменяемую функцию covariance_factor
для расчета пропускной способности. Перед изменением функции значение, возвращаемое covariance_factor для этих данных, было около 0,5. Уменьшение этого уменьшило пропускную способность. Мне пришлось позвонить _compute_covariance
после изменения этой функции, чтобы все факторы были рассчитаны правильно. Это не точное соответствие параметру bw из R, но, надеюсь, поможет вам двигаться в правильном направлении.
seaborn
stackoverflow.com/a/32803224/1922302