基于Python+Matplotlib實(shí)現(xiàn)直方圖的繪制
1.關(guān)于直方圖
直方圖 也稱(chēng) 質(zhì)量分布圖,雖然看起來(lái)像柱狀圖,
實(shí)際上區(qū)別又很大。直方圖通常橫軸表示數(shù)據(jù)類(lèi)型,縱軸表示各數(shù)據(jù)類(lèi)型的分布情況。
直方圖又可以分為頻數(shù)分布直方圖和頻率分布直方圖。其繪制方法并無(wú)多少差異,只是描述的事件有所不同。頻數(shù)分布直方圖描述的是某事件的數(shù)量,而頻率分布則描述的是其發(fā)生的頻率。
而關(guān)于頻率分布直方圖,又可以理解為是“密度圖”的一種。頻率分布直方圖 和 密度圖 都可以用來(lái)描述事件的概率分布,其中頻率分布直方圖描述的是離散型隨機(jī)變量的概率分布,而密度圖則描述的是連續(xù)型隨機(jī)變量的概率分布。
2.plt.hist()
繪制直方圖通過(guò)plt.hist()方法實(shí)現(xiàn),其常用的參數(shù)有:
x 數(shù)據(jù)集
bins ------------- 統(tǒng)計(jì)數(shù)據(jù)的區(qū)間分布。可以是一個(gè)元素為數(shù)值的列表,也可以是一個(gè)數(shù)值。是一個(gè)數(shù)值的時(shí)候可以配合range參數(shù)使用。
range ----------- 元組類(lèi)型,顯示的區(qū)間。
當(dāng)設(shè)置區(qū)間分布使用數(shù)值型的bins和range參數(shù)設(shè)定時(shí):range確定一個(gè)范圍,傳入形式是一個(gè)元組(注意不是range范圍對(duì)象),左右端點(diǎn)值都可取。數(shù)值型的bins表示將該范圍分成的份數(shù)(等分)。
density --------- 布爾型,顯示頻率統(tǒng)計(jì)結(jié)果。默認(rèn)為None(相當(dāng)于False),設(shè)為False不顯示頻率統(tǒng)計(jì)結(jié)果;設(shè)為T(mén)rue則顯示頻率統(tǒng)計(jì)結(jié)果,即繪制出的圖像由頻數(shù)分布直方圖變?yōu)轭l率分布直方圖。
histtype -------- 可選參數(shù),即直方圖的類(lèi)型。默認(rèn)為bar,即繪制出的“柱狀”條形。還可以設(shè)置為barstacked、step、stepfilled。
align -------------可選參數(shù),控制柱狀圖的水平分布,設(shè)置值為left、mid 或 right,默認(rèn)值為mid,也推薦使用mid。left和right會(huì)產(chǎn)生部分的空白區(qū)域。
log --------------- 布爾類(lèi)型,默認(rèn)為False,即y軸是否選擇指數(shù)刻度。
stacked --------- 布爾類(lèi)型,默認(rèn)為False,表示是否為堆積柱狀圖。
edgecolor------- 設(shè)定邊沿顏色
facecolor-------- 可以用來(lái)設(shè)定直方圖的顏色,也可以簡(jiǎn)寫(xiě)為color。
orientation-------直方圖的方向,默認(rèn)為豎直方向上的(‘vertical’),設(shè)為’horizontal’則表示水平方向上的。
cumulative------默認(rèn)為False,表示不累積。如果為T(mén)rue則設(shè)置累積分度直方圖。
3. 繪制一幅簡(jiǎn)單的 頻數(shù) 分布直方圖
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] ='#cc00ff' # 設(shè)定隨機(jī)數(shù)種子為30 np.random.seed(30) data = np.random.randint(0, 100, 100) plt.hist(data, bins=[0, 25, 50, 75, 100], facecolor='#ffff00', edgecolor='#FF0000') plt.xlabel('X指標(biāo)') plt.ylabel('樣本個(gè)數(shù)') plt.title('X指標(biāo)頻數(shù)分布直方圖') plt.show()
4. 繪制一幅 頻率 分布直方圖
將density設(shè)置為T(mén)rue即可·。
此外我們?cè)傩薷囊恍┘?xì)節(jié),將histtype參數(shù)設(shè)置為stepfilled(梯狀且填充)。
并把y軸的標(biāo)簽由“樣本個(gè)數(shù)”改為“樣本頻率”。
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] ='#cc00ff' np.random.seed(30) data = np.random.randint(0, 100, 100) plt.hist(data, bins=[0, 25, 50, 75, 100], facecolor='#ffff00', edgecolor='#FF0000', density=True, histtype='stepfilled') plt.xlabel('X指標(biāo)') plt.ylabel('樣本頻率') plt.title('X指標(biāo)頻數(shù)分布直方圖') plt.show()
圖像效果如下:
5. 累積分布直方圖(水平方向)
增加參數(shù)cumulative=True, orientation=‘horizontal’。
此外,因?yàn)閳D像變成了水平方向,所以也需要把x、y軸標(biāo)簽互換并稍作調(diào)整。
這里設(shè)置區(qū)間分布使用數(shù)值型的bins和range參數(shù)設(shè)定,范圍為0-100,區(qū)間分割為10等份。
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] ='#cc00ff' np.random.seed(30) data = np.random.randint(0, 100, 100) plt.hist(data, bins=10, range=(0, 100), facecolor='#ffff00', edgecolor='#FF0000', density=True, cumulative=True, orientation='horizontal') plt.xlabel('樣本累積頻率') plt.ylabel('X指標(biāo)') plt.title('X指標(biāo)頻數(shù)分布直方圖') plt.show()
圖像效果如下:
到此這篇關(guān)于基于Python+Matplotlib實(shí)現(xiàn)直方圖的繪制的文章就介紹到這了,更多相關(guān)Python Matplotlib直方圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django實(shí)現(xiàn)支付寶支付實(shí)例講解
在本篇文章里小編給大家整理的是一篇關(guān)于django支付寶支付的代碼實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2019-10-10matplotlib教程——強(qiáng)大的python作圖工具庫(kù)
這篇文章主要介紹了python matplotlib的相關(guān)資料,幫助大家更好的利用python matplotlib庫(kù)繪制圖表,感興趣的朋友可以了解下2020-10-10簡(jiǎn)單實(shí)例帶你了解Python的編譯和執(zhí)行全過(guò)程
python 是一種解釋型的編程語(yǔ)言,所以不像編譯型語(yǔ)言那樣需要顯式的編譯過(guò)程。然而,在 Python 代碼執(zhí)行之前,它需要被解釋器轉(zhuǎn)換成字節(jié)碼,這個(gè)過(guò)程就是 Python 的編譯過(guò)程,還不知道的朋友快來(lái)看看吧2023-04-043行Python代碼實(shí)現(xiàn)剪輯音樂(lè)
你以為剪輯音樂(lè)要很久嗎?其余3行語(yǔ)句Python就能瞬間搞定。本文就來(lái)詳細(xì)為大家講講實(shí)現(xiàn)的步驟,文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手嘗試一下2022-06-06python解決方案:WindowsError: [Error 2]
使用Python的rename()函數(shù)重命名文件時(shí)出現(xiàn)問(wèn)題,提示 WindowsError: [Error 2] 錯(cuò)誤,需要的朋友可以參考下2016-08-08python計(jì)算機(jī)視覺(jué)opencv圖像金字塔輪廓及模板匹配
這篇文章主要為大家介紹了python計(jì)算機(jī)視覺(jué)opencv圖像金字塔圖像輪廓及模板匹配的學(xué)習(xí)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享
這篇文章主要介紹了Linux下使用python自動(dòng)修改本機(jī)網(wǎng)關(guān)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05Python數(shù)據(jù)可視化編程通過(guò)Matplotlib創(chuàng)建散點(diǎn)圖代碼示例
這篇文章主要介紹了Python數(shù)據(jù)可視化編程通過(guò)Matplotlib創(chuàng)建散點(diǎn)圖實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12