matplotlib可視化篇hist()--直方圖

直方圖與柱狀圖外觀表現(xiàn)很相似,用來展現(xiàn)連續(xù)型數(shù)據(jù)分布特征的統(tǒng)計圖形(柱狀圖主要展現(xiàn)離散型數(shù)據(jù)分布),官方hist項目地址。

函數(shù):matplotlib.pyplot.hist(x,bins=None,range=None, density=None, bottom=None, histtype='bar', align='mid', log=False, color=None, label=None, stacked=False, normed=None)

關(guān)鍵參數(shù)

x: 數(shù)據(jù)集,最終的直方圖將對數(shù)據(jù)集進(jìn)行統(tǒng)計
bins: 統(tǒng)計的區(qū)間分布
range: tuple, 顯示的區(qū)間,range在沒有給出bins時生效
density: bool,默認(rèn)為false,顯示的是頻數(shù)統(tǒng)計結(jié)果,為True則顯示頻率統(tǒng)計結(jié)果,這里需要注意,頻率統(tǒng)計結(jié)果=區(qū)間數(shù)目/(總數(shù)*區(qū)間寬度),和normed效果一致,官方推薦使用density
histtype: 可選{'bar', 'barstacked', 'step', 'stepfilled'}之一,默認(rèn)為bar,推薦使用默認(rèn)配置,step使用的是梯狀,stepfilled則會對梯狀內(nèi)部進(jìn)行填充,效果與bar類似
align: 可選{'left', 'mid', 'right'}之一,默認(rèn)為'mid',控制柱狀圖的水平分布,left或者right,會有部分空白區(qū)域,推薦使用默認(rèn)
log: bool,默認(rèn)False,即y坐標(biāo)軸是否選擇指數(shù)刻度
stacked: bool,默認(rèn)為False,是否為堆積狀圖

最簡實現(xiàn)

import matplotlib.pyplot as plt
import numpy as np

x=np.random.randint(0,100,100)#生成【0-100】之間的100個數(shù)據(jù),即 數(shù)據(jù)集
bins=np.arange(0,101,10)#設(shè)置連續(xù)的邊界值,即直方圖的分布區(qū)間[0,10],[10,20]...
#直方圖會進(jìn)行統(tǒng)計各個區(qū)間的數(shù)值
plt.hist(x,bins,color='fuchsia',alpha=0.5)#alpha設(shè)置透明度,0為完全透明

plt.xlabel('scores')
plt.ylabel('count')
plt.xlim(0,100)#設(shè)置x軸分布范圍

plt.show()

效果圖:

hist直方圖效果
注意bins的范圍設(shè)置,如果使用np.arange(0,100,10),則不會統(tǒng)計[90-100]區(qū)間的頻數(shù),結(jié)果如下
修改bins結(jié)果
官方教程中還涉及對直方圖進(jìn)行曲線擬合,本例由于不符合正態(tài)分布,這里將每個柱狀圖的中心點進(jìn)行連接,hist()第一個返回值是統(tǒng)計各個區(qū)間的頻數(shù),第二個返回值是bins,即區(qū)間,所以我們有了點坐標(biāo),使用plot函數(shù)即可,實現(xiàn)過程如下:

import matplotlib.pyplot as plt
import numpy as np

x=np.random.randint(0,100,100)#生成【0-100】之間的100個數(shù)據(jù),即 數(shù)據(jù)集
bins=np.arange(0,101,10)#設(shè)置連續(xù)的邊界值,即直方圖的分布區(qū)間[0,10],[10,20]...
width=10#柱狀圖的寬度
#直方圖會進(jìn)行統(tǒng)計各個區(qū)間的數(shù)值
frequency_each,_,_= plt.hist(x,bins,color='deepskyblue',width=width,alpha=0.7)#alpha設(shè)置透明度,0為完全透明
plt.xlabel('scores')
plt.ylabel('count')
plt.xlim(0,100)#設(shè)置x軸分布范圍
plt.plot(bins[1:]-(width//2),frequency_each,color='palevioletred')#利用返回值來繪制區(qū)間中點連線
plt.show()

處理效果:

連接柱狀圖中心點
注意:返回值的bins的數(shù)據(jù)長度比頻數(shù)的長度大1,這里推薦使用從1開始直到bins結(jié)束,即將第0個元素去掉,保證二者的長度一致,當(dāng)然還需要減去width的一半,保證在中點。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容