Python使用plt.boxplot()函數(shù)繪制箱圖、常用方法以及含義詳解
1. 箱圖含義
箱圖是一中用于統(tǒng)計(jì)數(shù)據(jù)分布的統(tǒng)計(jì)圖,也可以粗略地看出數(shù)據(jù)是否具有對(duì)稱性,分布的分散程度等信息。箱圖中的信息含義如下:
最下方的橫線表示最小值最上方的橫線表示最大值黑色空心圓圈表示異常值黑色實(shí)心圓圈表示極端值箱子由下四分位數(shù)、中值以及上四分位數(shù)組成
異常值又稱離群值,指大于1.5倍的四分位數(shù)間距的值。處于1.5倍~3倍四分位數(shù)間距的值用空心圓圈表示。極端值屬于異常值中的一種。
極端值是指大于3倍的四分位數(shù)間距的值。
2.計(jì)算方法
首先找出一組數(shù)據(jù)的五個(gè)特征值,包括除異常值外的最小值(minimum)和最大值(maximum)、中位數(shù)(median)、兩個(gè)四分位數(shù)(上四分位數(shù)Q1和下四分位Q3數(shù));
中位數(shù):將所有數(shù)值從小到大排列,如果是奇數(shù)個(gè)數(shù)值則取最中間一個(gè)值作為中位數(shù),之后最中間的值在計(jì)算Q1和Q3時(shí)不再使用;偶數(shù)個(gè)數(shù)值則取最中間兩個(gè)數(shù)的平均數(shù)作為中位數(shù),這兩個(gè)數(shù)在計(jì)算Q1和Q3時(shí)繼續(xù)使用。
Q1:中位數(shù)將所有數(shù)據(jù)分成兩部分,最小值到中位數(shù)的部分按取中位數(shù)的方法取中位數(shù)作為Q1。
Q3:同Q1取法,取中位數(shù)到最大值的中位數(shù)。
IQR(四分位數(shù)間距)=Q3-Q1。
所有不在(Q1-1.5IQR,Q3+1.5IQR)的區(qū)間內(nèi)的數(shù)為離群值,剩下的值最大的為最大值,最小的為最小值。
特征值(從下到上):最小值、Q1、中位數(shù)、Q3、最大值
將五個(gè)數(shù)值描繪在一個(gè)圖上,五個(gè)特征值在一個(gè)直線上,最小值和Q1連接起來,Q1、中位數(shù)、Q3分別作平行等長(zhǎng)線段,
然后,連接兩個(gè)四分位數(shù)構(gòu)成箱子。
最后連接兩個(gè)極值點(diǎn)與箱子,形成箱式圖,然后點(diǎn)上離群值即可。
3.繪圖
3.1 繪制單個(gè)箱圖
import matplotlib.pyplot as plt import numpy as np #生成data數(shù)據(jù) np.random.seed(100) data = np.random.normal(size=(1000,),loc=0,scale=1) # 繪圖 plt.boxplot(data) plt.show()
3.2 繪制多個(gè)箱圖
import matplotlib.pyplot as plt import numpy as np np.random.seed(100) data = np.random.normal(size=(1000,4),loc=0,scale=1) plt.boxplot(data) plt.show()
3.3實(shí)戰(zhàn)
def plt_box_iamge(df): """ snrr的五個(gè)范圍為[5,10)、[10,15)、[15,20)、[20,30)、[30-),按照五個(gè)snrr范圍計(jì)算對(duì)應(yīng)redchi的箱圖 :param df:包含snrr以及redchi的csv數(shù)據(jù)(dataFrame)。 :return: """ # 根據(jù)snrr范圍對(duì)redchi進(jìn)行篩選。 df1 = df.loc[df['lam_snrr'] >= 5] redchi_1 = df1.loc[df1['lam_snrr'] < 10].redchi df2 = df.loc[df['lam_snrr'] >= 10] redchi_2 = df2.loc[df2['lam_snrr'] < 15].redchi df3 = df.loc[df['lam_snrr'] >= 15] redchi_3 = df3.loc[df3['lam_snrr'] < 20].redchi df4 = df.loc[df['lam_snrr'] >= 20] redchi_4 = df4.loc[df4['lam_snrr'] < 30].redchi redchi_5 = df.loc[df['lam_snrr'] >= 30].redchi # 繪圖 ax = plt.subplot() ax.boxplot([redchi_1, redchi_2, redchi_3, redchi_4, redchi_5]) # 設(shè)置軸坐標(biāo)值刻度的標(biāo)簽 ax.set_xticklabels(['5<=snrr<10', '10<=snrr<15', '15<=snrr<20', '20<=snrr<30', '30<=snrr'], fontsize=8) # 保存圖片 plt.savefig('./images/box.jpg') plt.show() if __name__ == '__main__': df = pd.read_csv('./inputfile/lamost6w_new.csv') df_sc = screening(df) # 篩選數(shù)據(jù) (lamost數(shù)據(jù)應(yīng)該在正常值范圍內(nèi),不然因?yàn)閿?shù)值差過大會(huì)導(dǎo)致繪制不出圖像!) plt_box_iamge(df_sc)
3.3 參數(shù)詳解
plt.boxplot(x, # x:指定要繪制箱圖的數(shù)據(jù) notch=None, # notch:是否是凹口的形式展現(xiàn)箱線圖,默認(rèn)非凹口 sym=None, # sym:指定異常點(diǎn)的形狀,默認(rèn)為+號(hào)顯示 vert=None, # vert:是否需要將箱線圖垂直擺放,默認(rèn)垂直擺放 whis=None, # whis:指定上下須與上下四分位的距離,默認(rèn)為1.5倍的四分位差 positions=None, # positions:指定箱線圖的位置,默認(rèn)為[0,1,2…] widths=None, # widths:指定箱線圖的寬度,默認(rèn)為0.5 patch_artist=None, # patch_artist:是否填充箱體的顏色 meanline=None, # meanline:是否用線的形式表示均值,默認(rèn)用點(diǎn)來表示 showmeans=None, # showmeans:是否顯示均值,默認(rèn)不顯示 showcaps=None, # showcaps:是否顯示箱線圖頂端和末端的兩條線,默認(rèn)顯示 showbox=None, # showbox:是否顯示箱線圖的箱體,默認(rèn)顯示 showfliers=None, # showfliers:是否顯示異常值,默認(rèn)顯示 boxprops=None, # boxprops:設(shè)置箱體的屬性,如邊框色,填充色等 labels=None, # labels:為箱線圖添加標(biāo)簽,類似于圖例的作用 flierprops=None, # filerprops:設(shè)置異常值的屬性,如異常點(diǎn)的形狀、大小、填充色等 medianprops=None, # medianprops:設(shè)置中位數(shù)的屬性,如線的類型、粗細(xì)等 meanprops=None, # meanprops:設(shè)置均值的屬性,如點(diǎn)的大小、顏色等 capprops=None, # capprops:設(shè)置箱線圖頂端和末端線條的屬性,如顏色、粗細(xì)等 whiskerprops=None) # whiskerprops:設(shè)置須的屬性,如顏色、粗細(xì)、線的類型等
3.4 常用方法
import matplotlib.pyplot as plt import numpy as np np.random.seed(100) data = np.random.normal(size=(1000,4),loc=0,scale=1) ax = plt.subplot() ax.boxplot(data) # 繪圖 ax.set_xlim([0,5]) # 設(shè)置x軸值的范圍 rotation=30 # ax.set_xticks() # 自定義x軸的值 ax.set_xlabel("xlabel") # 設(shè)置x軸的標(biāo)簽 ax.set_xticklabels(['A','B','C','D'], rotation=30,fontsize=10) # 設(shè)置x軸坐標(biāo)值的標(biāo)簽 旋轉(zhuǎn)角度 字體大小 ax.set_title("xcy") # 設(shè)置圖像標(biāo)題 ax.legend(labels= ['A','B','C','D'],loc='best',) # 增加圖例 ax.text(x=0.2 , y=3.5 , s="test" ,fontsize=12) # 增加注 plt.show()
參考:
百度百科
matplotlib官方文檔
總結(jié)
到此這篇關(guān)于Python使用plt.boxplot()函數(shù)繪制箱圖、常用方法以及含義詳解的文章就介紹到這了,更多相關(guān)plt.boxplot()函數(shù)繪制箱圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python通過文本在一個(gè)圖中畫多條線的實(shí)例
今天小編就為大家分享一篇python通過文本在一個(gè)圖中畫多條線的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02對(duì)python中大文件的導(dǎo)入與導(dǎo)出方法詳解
今天小編就為大家分享一篇對(duì)python中大文件的導(dǎo)入與導(dǎo)出方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12用python + hadoop streaming 分布式編程(一) -- 原理介紹,樣例程序與本地調(diào)試
Hadoop 是一個(gè)實(shí)現(xiàn)了 MapReduce 計(jì)算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運(yùn)行于計(jì)算機(jī)集群上,完成海量數(shù)據(jù)的計(jì)算。2014-07-07pytest接口測(cè)試之fixture傳參數(shù)request的使用
本文主要介紹了pytest接口測(cè)試之fixture傳參數(shù)request的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08python使用xpath中遇到:<Element a at 0x39a9a80>到底是什么?
這篇文章主要給大家詳細(xì)介紹了關(guān)于python使用xpath中遇到:<Element a at 0x39a9a80>的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Python實(shí)現(xiàn)自動(dòng)化處理Word文檔的方法詳解
本文主要介紹了如何使用Python實(shí)現(xiàn)Word文檔的自動(dòng)化處理,包括批量生成Word文檔、在Word文檔中批量進(jìn)行查找和替換、將Word文檔批量轉(zhuǎn)換成PDF等,希望對(duì)你有所幫助2022-08-08Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式
今天小編就為大家分享一篇Python&&GDAL實(shí)現(xiàn)NDVI的計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)
這篇文章主要給大家介紹了關(guān)于如何利用Python動(dòng)態(tài)模擬太陽系運(yùn)轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09