如何在python中绘制角度频率分布曲线

如何在python中绘制角度频率分布曲线,python,distribution,angle,curve,Python,Distribution,Angle,Curve,我只有一组数据的角度值。现在我需要绘制一条角度分布曲线,即x轴上的角度,y轴上出现的角度次数/频率。 这些是为一组数据整理的角度:- [98.1706427, 99.09896751, 99.10879006, 100.47518838, 101.22770381, 101.70374296, 103.15715294, 104.4653976,105.50441485, 106.82885361, 107.4605319, 108.93228646, 111.22463712, 112.236

我只有一组数据的角度值。现在我需要绘制一条角度分布曲线,即x轴上的角度,y轴上出现的角度次数/频率。 这些是为一组数据整理的角度:-

[98.1706427, 99.09896751, 99.10879006, 100.47518838, 101.22770381, 101.70374296,
103.15715294, 104.4653976,105.50441485, 106.82885361, 107.4605319, 108.93228646,
111.22463712, 112.23658018, 113.31223886, 113.4000603, 114.14565594, 114.79809084,
115.15788861, 115.42991416, 115.66216071, 115.69821092, 116.56319054, 117.09232139,
119.30835385, 119.31377834, 125.88278338, 127.80937901, 132.16187185, 132.61262906,
136.6751744, 138.34164387,]
我该怎么做。。?? 如何为这个…编写python程序。。。??并将其绘制为分布曲线,编辑:

如果您还需要直线图,最好使用
numpy
生成直方图,然后将该信息也用于直线:

from matplotlib import pyplot as plt
import numpy as np

angles = [98.1706427, 99.09896751, 99.10879006, 100.47518838, 101.22770381,
101.70374296, 103.15715294, 104.4653976, 105.50441485, 106.82885361, 
107.4605319, 108.93228646, 111.22463712, 112.23658018, 113.31223886, 
113.4000603, 114.14565594, 114.79809084, 115.15788861, 115.42991416, 
115.66216071, 115.69821092, 116.56319054, 117.09232139, 119.30835385, 
119.31377834, 125.88278338, 127.80937901, 132.16187185, 132.61262906,
136.6751744, 138.34164387, ] 


hist,edges = np.histogram(angles, bins=20)
bin_centers = 0.5*(edges[:-1] + edges[1:])
bin_widths = (edges[1:]-edges[:-1])



plt.bar(bin_centers,hist,width=bin_widths)
plt.plot(bin_centers, hist,'r')
plt.xlabel('angle [$^\circ$]')
plt.ylabel('frequency')
plt.show()
这看起来像这样:

如果您对直方图本身不感兴趣,请省去线
plt.bar(bin_中心,hist,width=bin_宽度)

EDIT2

我在平滑的直方图中看不到科学价值。如果您提高直方图的分辨率(在
np.histogram
命令中的
bins
参数),它可能会发生相当大的变化。例如,如果增加仓位计数,可能会出现新的峰值;如果减少仓位计数,则两个峰值可能合并为一个峰值。记住这一点,平滑直方图曲线表明您拥有的数据比您拥有的更多。然而,如果你真的必须,你可以平滑一条曲线,如本文所述,即


然后在
x
函数
hist
上绘制
y
,实际返回
x
y
箱子的坐标。您可以使用此功能为线形图准备数据:

y, x, _ = plt.hist(angles) # No need for the 3rd return value
xc = (x[:-1] + x[1:]) / 2 # Take centerpoints
# plt.clf()
plt.plot(xc, y)
plt.show() # Etc.

您将得到柱状图和线形图。如果不需要这样做,请在绘制线之前清理画布,方法是取消对
clf()

n.p.的调用注释。如果这解决了您的问题,您可以接受答案。但我的另一个问题是,这是一个柱状图。如何在这个直方图上绘制曲线。。??即我需要的曲线(不是高斯曲线)。。。若柱状图和曲线都在同一个图中,那个就更好了。你们是说有柱状图值的直线图吗?先生,我是说曲线图。。。但不是高斯曲线(因为它有一个最大值),而是直方图之后的曲线图(因为从直方图thr看,115度左右的角度较多,120度左右的角度较少)。所以曲线显示峰值在115度左右,最小值在120度左右等等…我可以平滑直线图吗。。。??也就是说,它显示了更为尖锐的一个,并且指向直方图中每个条的中心。。。但是,既然线条图描绘的是角度分布,我该如何平滑它(也就是说,我有更多的角度在115度左右,相对较少的角度在120度左右)。我能平滑线条图吗。。。??也就是说,它显示了更为尖锐的一个,并且指向直方图中每个条的中心。。。但是,既然线条图描绘的是角度分布,我该如何平滑它呢(也就是说,90度左右的角度更多,110度左右的角度相对较少,最大值也在120度左右)。当然。您可以在Xs和Ys上使用
numpy.interp()
y, x, _ = plt.hist(angles) # No need for the 3rd return value
xc = (x[:-1] + x[1:]) / 2 # Take centerpoints
# plt.clf()
plt.plot(xc, y)
plt.show() # Etc.