python繪制簡單直方圖的方法
直方圖,又稱質(zhì)量分布圖,是一種統(tǒng)計報告圖,由一系列高度不等的縱條或線段表示數(shù)據(jù)分布情況。用橫軸表示數(shù)據(jù)類型,縱軸表示分布情況。直方圖是數(shù)值數(shù)據(jù)分布的精確圖形表示。繪制連續(xù)性的數(shù)據(jù),展示一組或多組數(shù)據(jù)的分布狀況。
直方圖的繪制和條形圖有些相似,需要把plt.bar()修改成plt.hist(),更改圖形的擬合方式,即可繪制直方圖。例如你獲取到了250部電影的數(shù)量,他們的時長都在80-140分鐘,如何呈現(xiàn)電影的時長分布情況呢?
老規(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)) ? # 計算組數(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()
運行結(jié)果如下圖:
程序分析:通過隨機數(shù)random.randint()生成250個80-140的隨機整數(shù),代表250部電影的時長。然后要把時間段分成組,設(shè)置組距d為3,那么(max-min)//d即為分成的組數(shù),然后通過plt.hist()對組數(shù)和數(shù)據(jù)進行擬合。設(shè)置x刻度時,因為range含頭不含尾,所以最后截止的位置要加一個組距d,才能顯示完全??梢钥闯?,這個數(shù)字直方圖可以顯示每個電影時長在每個時段占得數(shù)目。那么問題又來了,如果想要知道在每個時段占總時段的比例呢,也就是頻率分布直方圖?
so easy! 只需要在plt.hist()里面設(shè)置參數(shù)density=True實現(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)) ? # 計算組數(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實現(xiàn)頻率化 ? # 設(shè)置x軸刻度 plt.xticks(range(min(a),max(a)+d,d)) ? # 設(shè)置網(wǎng)格 plt.grid(alpha=0.4) plt.show()
運行結(jié)果:
顯而易見,每個時段的數(shù)目變成了總體的占比,也就是頻率,很好的達到了想要的效果。
那如果要自己設(shè)置數(shù)據(jù)自己設(shè)置x軸的距離,對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()
運行結(jié)果如下圖:
可以看出來,很簡單,只需要把x軸對應(yīng)的數(shù)據(jù)設(shè)置好,把對應(yīng)x軸的刻度設(shè)置好,進行數(shù)據(jù)匹配即可。一定要注意,分配的組數(shù)和數(shù)據(jù)個數(shù)匹配問題。
總結(jié):這篇文章總的講述了一下繪制頻數(shù)直方圖和頻率直方圖的繪制方法,通過圖像進行比較,發(fā)現(xiàn)各個直方圖的優(yōu)缺點,以便在工程中進行運用。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中matplotlib實現(xiàn)隨鼠標滑動自動標注代碼
這篇文章主要介紹了python中matplotlib實現(xiàn)隨鼠標滑動自動標注代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04python進程池實現(xiàn)的多進程文件夾copy器完整示例
這篇文章主要介紹了python進程池實現(xiàn)的多進程文件夾copy器,結(jié)合完整實例形式分析了Python基于多進程與進程池的文件操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-11-11Python多線程同步Lock、RLock、Semaphore、Event實例
這篇文章主要介紹了Python多線程同步Lock、RLock、Semaphore、Event實例,Lock & RLock 用來確保多線程多共享資源的訪問,Semaphore用來確保一定資源多線程訪問時的上限,Event是最簡單的線程間通信的方式,需要的朋友可以參考下2014-11-11