The*_*ama 1 python scipy kernel-density
我正在制作这样的密度图如何在matplotlib中创建密度图?即时通讯将使avvlines到图上的几个点,我的问题是我需要知道最高峰的确切x值是多少。
我可以通过循环找到它:
density = gaussian_kde(data)
aa = 0
bb = 0
for i in range(max value of data):
if density(i)[0]>aa:
aa = density(i)[0]
bb = i
Run Code Online (Sandbox Code Playgroud)
此bb之后的值具有峰值的x值,但执行此循环的时间太长。此刻大约需要25秒,将来数据的大小会更大
我希望这不是重复的,但至少找不到这个问题。
您可以使用numpy.argmax:
ys = density(np.arange(9))
bb = np.argmax(ys)
aa = ys[bb]
Run Code Online (Sandbox Code Playgroud)
这将计算的相同的值aa,并bb为你的代码发布。但是,这只能在的整数值中找到最大值x。如果查看贾斯汀·皮尔(Justin Peel)的图,您会发现峰值密度可能出现在某些非整数处x-value。因此,要找到更接近峰值密度的近似值,请使用
xs = np.linspace(0,8,200)
ys = density(xs)
index = np.argmax(ys)
max_y = ys[index]
max_x = xs[index]
Run Code Online (Sandbox Code Playgroud)