def normfun(self, x, mu, sigma): """ 正態分布的概率密度函數 :param x: 數據集中的某一具體測量值 :param mu: 數據集的平均值,反映測量值分布的集中趨勢 :param sigma: 數據集的標准差,反映測量值分布的分散程度 :return: """ pdf = np.exp(-((x - mu) ** 2) / (2 * sigma ** 2)) / (sigma * np.sqrt(2 * np.pi)) return pdf
def draw(self, name, data): mean = np.mean(data) # 計算均值 std = np.std(data) # 計算方差 data1 = [(x-mean)/std for x in data] # z-score標准化方法(數據標准化) num_bins = 100 # 直方圖柱子的數量 plt.figure(figsize=(20, 8)) # data數據 num_bins柱子個數 range取值范圍[-3.3] rwidth柱子寬度 n, bins, patches = plt.hist(data1, num_bins, range=[-5, 5], rwidth=0.8, density=0.9, facecolor='blue', alpha=0.5) # 直方圖函數,x為x軸的值,density=1表示為概率密度,即和為一,綠色方塊,色深參數0.5.返回n個概率,直方塊左邊線的x值,及各個方塊對象 # print(bins) y = self.normfun(bins, np.mean(data1), np.std(data1)) # 擬合一條最佳正態分布曲線(方程)y 代替品 ——>>> from scipy.stats import norm y = norm.pdf(bins, mu, sigma) plt.plot(bins, y, 'r--') # 繪制y的曲線 plt.xlabel('sepal-length') # 繪制x軸 plt.ylabel('Probability') # 繪制y軸 plt.title(r'{} $\mu={}$,$\sigma={}$'.format(name, mean, std)) # 標題 plt.subplots_adjust(left=0.15) # 左邊距 out_file = 'out_pic/%s.png' % name plt.savefig(out_file, transparent=True, bbox_inches='tight', dpi=200, pad_inches=0.0, set_visiable=False, format='png') print('畫圖完成 %s' % out_file) # plt.show()
屬性 | 說明 | 類型 |
---|---|---|
x | 數據 | 數值類型 |
bins | 條形數 | int |
color | 顏色 | "r","g","y","c" |
density | 是否以密度的形式顯示 | bool |
range | x軸的范圍 | 數值元組(起,終) |
bottom | y軸的起始位置 | 數值類型 |
histtype | 線條的類型 | "bar":方形,"barstacked":柱形, "step":"未填充線條" "stepfilled":"填充線條" |
align | 對齊方式 | "left":左,"mid":中間,"right":右 |
orientation | orientation | "horizontal":水平,"vertical":垂直 |
log | 單位是否以科學計術法 | bool |
參考:計算標准化 https://www.cnblogs.com/yahengwang/p/10634010.html