python 如何计算以极坐标表示的直方图的重心

mpbci0fu  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(152)

我将直方图显示为极坐标图,并希望显示重心,以查看直方图是否存在主导方向。我的问题是,当直方图具有大量0和2pi值时,重心不起作用(因为0和2pi在极坐标图中是相同的Angular )
所以我得到了这样的结果:

我希望在0度时看到红点。
下面是一个简单的示例代码:

import numpy as np
import matplotlib.pyplot as plt

a = np.random.rand(1000)*3.14*2
a = np.hstack((a,np.ones(100)*0.1))
a = np.hstack((a,np.ones(100)*3.1*2))
f = plt.figure()
f.add_subplot(1,1,1,projection='polar')
n, bins = np.histogram(np.array(a), 50)
n = n / np.sum(n)
plt.hist((bins[0:-1] + bins[1:]) / 2, weights=n, bins=bins, rwidth=1.)
binscenter = (bins[0:-1] + bins[1:]) / 2
moyenne = np.sum(n * binscenter) / np.sum(n)
plt.scatter(moyenne ,0.1,c='r')

plt.show()
rxztt3cl

rxztt3cl1#

这里需要的是循环统计
我们通常处理具有线性支撑的数据,即数据可以用真实的表示,但是像Angular 这样的量没有线性支撑,而是圆形支撑,所以我们需要专门的理论来处理它们。
幸运的是,SciPy已经有了一些函数来计算循环数据的描述性统计量,下面是一个例子:

import math

import numpy as np
import scipy

data = [0.0, 0.0, 2 * math.pi, 2 * math.pi]

linear_mean = np.mean(data)
circular_mean = scipy.stats.circmean(data)

如您所见,linear_mean返回pi,而circular_mean返回2pi
如果你想了解更多关于循环统计的知识,我强烈建议你阅读这篇book

相关问题