python繪制簡單直方圖的方法
直方圖,又稱質(zhì)量分布圖,是一種統(tǒng)計(jì)報(bào)告圖,由一系列高度不等的縱條或線段表示數(shù)據(jù)分布情況。用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。直方圖是數(shù)值數(shù)據(jù)分布的精確圖形表示。繪制連續(xù)性的數(shù)據(jù),展示一組或多組數(shù)據(jù)的分布狀況。
直方圖的繪制和條形圖有些相似,需要把plt.bar()修改成plt.hist(),更改圖形的擬合方式,即可繪制直方圖。例如你獲取到了250部電影的數(shù)量,他們的時(shí)長都在80-140分鐘,如何呈現(xiàn)電影的時(shí)長分布情況呢?
老規(guī)矩,上代碼:
''' ? ? 組數(shù)=極差/組距 ''' from matplotlib import pyplot as plt from matplotlib import font_manager import random ? a = [random.randint(80,140) for i in range(250)] print(a) print(max(a)-min(a)) ? # 計(jì)算組數(shù) d = 3 ?# 組距 num_bins = (max(a)-min(a))//d ? # 設(shè)置圖形大小 plt.figure(figsize=(20, 8), dpi=80) plt.hist(a, num_bins) ? # 設(shè)置x軸刻度 plt.xticks(range(min(a), max(a)+d, d)) ? # 設(shè)置網(wǎng)格 plt.grid(alpha=0.4) plt.show()
運(yùn)行結(jié)果如下圖:

程序分析:通過隨機(jī)數(shù)random.randint()生成250個(gè)80-140的隨機(jī)整數(shù),代表250部電影的時(shí)長。然后要把時(shí)間段分成組,設(shè)置組距d為3,那么(max-min)//d即為分成的組數(shù),然后通過plt.hist()對(duì)組數(shù)和數(shù)據(jù)進(jìn)行擬合。設(shè)置x刻度時(shí),因?yàn)閞ange含頭不含尾,所以最后截止的位置要加一個(gè)組距d,才能顯示完全??梢钥闯觯@個(gè)數(shù)字直方圖可以顯示每個(gè)電影時(shí)長在每個(gè)時(shí)段占得數(shù)目。那么問題又來了,如果想要知道在每個(gè)時(shí)段占總時(shí)段的比例呢,也就是頻率分布直方圖?
so easy! 只需要在plt.hist()里面設(shè)置參數(shù)density=True實(shí)現(xiàn)數(shù)量的頻率化,其余不變。
代碼如下:
''' ? ? 組數(shù)=極差/組距 ''' from matplotlib import pyplot as plt from matplotlib import font_manager import random ? a = [random.randint(80,140) for i in range(250)] print(a) print(max(a)-min(a)) ? # 計(jì)算組數(shù) d = 3 ?# 組數(shù) num_bins = (max(a)-min(a))//d ? # 設(shè)置圖形大小 plt.figure(figsize=(20,8),dpi=80) plt.hist(a,num_bins,density=True) ?# 使用density實(shí)現(xiàn)頻率化 ? # 設(shè)置x軸刻度 plt.xticks(range(min(a),max(a)+d,d)) ? # 設(shè)置網(wǎng)格 plt.grid(alpha=0.4) plt.show()
運(yùn)行結(jié)果:

顯而易見,每個(gè)時(shí)段的數(shù)目變成了總體的占比,也就是頻率,很好的達(dá)到了想要的效果。
那如果要自己設(shè)置數(shù)據(jù)自己設(shè)置x軸的距離,對(duì)x軸的刻度不均勻劃分呢?
上代碼:
# coding=utf-8 from matplotlib import pyplot as plt from matplotlib import font_manager ? interval = [0,5,10,15,20,25,30,35,40,45,60,90,150] width = [5,5,5,5,5,5,5,5,5,15,30,60] quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47] ? plt.figure(figsize=(20,8),dpi=80) ? plt.bar(range(len(quantity)),quantity,width=1) ? # 設(shè)置x軸刻度 _x = [i-0.5 for i in range(13)] ? plt.xticks(_x, interval) ? plt.grid(alpha=0.8) plt.show()
運(yùn)行結(jié)果如下圖:

可以看出來,很簡單,只需要把x軸對(duì)應(yīng)的數(shù)據(jù)設(shè)置好,把對(duì)應(yīng)x軸的刻度設(shè)置好,進(jìn)行數(shù)據(jù)匹配即可。一定要注意,分配的組數(shù)和數(shù)據(jù)個(gè)數(shù)匹配問題。
總結(jié):這篇文章總的講述了一下繪制頻數(shù)直方圖和頻率直方圖的繪制方法,通過圖像進(jìn)行比較,發(fā)現(xiàn)各個(gè)直方圖的優(yōu)缺點(diǎn),以便在工程中進(jìn)行運(yùn)用。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python讀取并定位excel數(shù)據(jù)坐標(biāo)系詳解
這篇文章主要介紹了python讀取并定位excel數(shù)據(jù)坐標(biāo)系詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06
使用Python PIL庫讀取文件批量處理圖片大小實(shí)現(xiàn)
這篇文章主要為大家介紹了使用Python PIL庫讀取文件批量處理圖片大小實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Python基于opencv實(shí)現(xiàn)的簡單畫板功能示例
這篇文章主要介紹了Python基于opencv實(shí)現(xiàn)的簡單畫板功能,結(jié)合實(shí)例形式分析了Python使用opencv模塊進(jìn)行圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
Python實(shí)現(xiàn)制作透明背景的電子印章
這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實(shí)現(xiàn)制作透明背景的電子印章,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-09-09
Python實(shí)現(xiàn)自動(dòng)為照片添加日期并分類的方法
這篇文章主要介紹了Python實(shí)現(xiàn)自動(dòng)為照片添加日期并分類的方法,涉及Python針對(duì)文件與目錄的遍歷、判斷、修改、復(fù)制及文件屬性的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

