我将直方图显示为极坐标图,并希望显示重心,以查看直方图是否存在主导方向。我的问题是,当直方图具有大量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()
1条答案
按热度按时间rxztt3cl1#
这里需要的是循环统计。
我们通常处理具有线性支撑的数据,即数据可以用真实的表示,但是像Angular 这样的量没有线性支撑,而是圆形支撑,所以我们需要专门的理论来处理它们。
幸运的是,SciPy已经有了一些函数来计算循环数据的描述性统计量,下面是一个例子:
如您所见,
linear_mean
返回pi
,而circular_mean
返回2pi
。如果你想了解更多关于循环统计的知识,我强烈建议你阅读这篇book。