python繪製直方圖matplotlib.pyplot.hist( ) 方法常用參數詳解

1.在瞭解繪製直方圖函數的參數之前,首先要知道如何繪製直方圖:

一般而言,直方圖一般用於觀察數據的分佈情況,橫軸將根據觀測到的數據選擇合適的範圍進行範圍分段,即將整個觀測數據的範圍分成一系列間隔,每一個間隔稱爲一個組距,然後計算每個間隔中有多少值;每個間隔中的值稱爲頻數,用縱軸來代表頻數的話就是我們常說的頻數直方圖,此時直方圖中的面積沒有意義

根據縱軸表示的不同,還有一種直方圖稱爲頻率直方圖,的在統計出每一個間隔中的頻數後,將頻數除以總的觀測數,就得到了每一個間隔中的頻率,然後將頻率除以組距(每一個間隔的寬度),即用縱軸來表示 頻率/組距 的大小;之所以要除以組距的目的是爲了讓頻率直方圖的階梯形折線將逼近於概率密度曲線。也就是說,當觀測數據充分大時,頻率直方圖近似地反映了概率密度曲線的大致形狀,在統計推斷中常常由此提出對總體分佈形式的假設。(具體解釋如下:截取自百度百科

2.瞭解了直方圖的基本含義,我們看如何調用函數繪製直方圖

在python中,繪製直方圖是使用matplotlib.pyplot.hist()函數,具體參數如下:

(n, bins, patches)=matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, 
cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', 
rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)

可以看到有很多參數,其實在實際使用過程中我們只需要關注幾個重要的參數就可以了

首先,最簡單的,使用默認的,輸入數據,繪製直方圖,而不設置任何參數

import numpy as np
import matplotlib.pyplot as plt

#生成數據,以10000組均值爲0,方差爲1的高斯分佈數據爲例
data = np.random.normal(0,1,10000)

n, bins, patches = plt.hist(data)
plt.show()

結果如上圖:從圖中可以看出共分爲了10個間隔,這是因爲我們沒有指定分爲幾個間隔,默認會分爲10個間隔,返回值中的bins表示每一個間隔的邊緣(起點和終點),所以共11個;而返回值中的n表示的是落入每一個間隔的樣本數

但上圖,由於所分間隔太大的緣故,太粗糙了,爲了進一步細化直方圖,我們可以通過調整函數中的參數bins

參數bins: 劃分間隔,可以採用 整數來指定間隔的數量,然後由程序由間隔的數量來確定每一個間隔的範圍,也可以通過列表來直接指定間隔的範圍

bins : int or sequence or str, optional

常用的通過整數來劃分間隔,我們指定間隔數爲50,效果圖如下:

n, bins, patches = plt.hist(data,50)
plt.show()

也可以用列表,爲簡單起見,我只分爲4個間隔來說明:

n, bins, patches = plt.hist(data,[-3,-2,0,1,3])
plt.show()
#我們指定的是間隔的邊緣,每一個間隔爲[-3,-2) [-2,0) [0,1) [1,3]
#除了最後一個間隔外,所有間隔均爲左閉右開
#而且每一個間隔長度不用相等
#在我們指定間隔外的數據會被直接忽略

也就是說如果我們通過指定bins整數來確定間隔,那麼我們就是在整個區間上進行分割,但是如果我們想在一定範圍內進行分割並且還想通過指定bins整數來實現怎麼辦呢?

參數range就可以上場搭配bins了,參數range的類型爲tuple型,指定全局間隔(min,max)

range : tuple or None, optional

注:如果bins爲列表形式,則range對其無影響

我們想要在[-3,3]的範圍內分10個間隔來畫直方圖

n, bins, patches = plt.hist(data,10,(-3,3))
plt.show()

到現在,我們所畫的均爲頻數直方圖,那麼如果我們想畫頻率直方圖呢?

通過函數中的參數 density即可,density的類型是 bool型,指定爲True,則爲頻率直方圖,反之,頻數直方圖

density : bool, optional

n, bins, patches = plt.hist(t,10,(-3,3),density = True)
plt.show()

注意觀察縱軸的刻度變化

當然你也可以通過color參數給直方圖換個顏色

n, bins, patches = plt.hist(t,10,(-3,3),density = True,color = 'green')
plt.show()

常用的應該就是這些吧,詳細的參數分析可以查看官方手冊:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章