首頁 > 軟體

Python使用plt.boxplot()函數繪製箱圖、常用方法以及含義詳解

2022-08-12 18:01:12

1. 箱圖含義

箱圖是一中用於統計資料分佈的統計圖,也可以粗略地看出資料是否具有對稱性,分佈的分散程度等資訊。箱圖中的資訊含義如下:

最下方的橫線表示最小值最上方的橫線表示最大值黑色空心圓圈表示異常值黑色實心圓圈表示極端值箱子由下四分位數、中值以及上四分位陣列成

異常值又稱離群值,指大於1.5倍的四分位數間距的值。處於1.5倍~3倍四分位數間距的值用空心圓圈表示。極端值屬於異常值中的一種。
極端值是指大於3倍的四分位數間距的值。

2.計算方法

首先找出一組資料的五個特徵值,包括除異常值外的最小值(minimum)和最大值(maximum)、中位數(median)、兩個四分位數(上四分位數Q1和下四分位Q3數);

中位數:將所有數值從小到大排列,如果是奇數個數值則取最中間一個值作為中位數,之後最中間的值在計算Q1和Q3時不再使用偶數個數值則取最中間兩個數的平均數作為中位數,這兩個數在計算Q1和Q3時繼續使用

Q1:中位數將所有資料分成兩部分,最小值到中位數的部分按取中位數的方法取中位數作為Q1。

Q3:同Q1取法,取中位數到最大值的中位數。

IQR(四分位數間距)=Q3-Q1

所有不在(Q1-1.5IQR,Q3+1.5IQR)的區間內的數為離群值,剩下的值最大的為最大值,最小的為最小值。

特徵值(從下到上):最小值、Q1、中位數、Q3、最大值

將五個數值描繪在一個圖上,五個特徵值在一個直線上,最小值和Q1連線起來,Q1、中位數、Q3分別作平行等長線段
然後,連線兩個四分位數構成箱子。

最後連線兩個極值點與箱子,形成箱式圖,然後點上離群值即可。

3.繪圖

3.1 繪製單個箱圖

import matplotlib.pyplot as plt
import numpy as np

#生成data資料
np.random.seed(100)
data = np.random.normal(size=(1000,),loc=0,scale=1)

# 繪圖
plt.boxplot(data)
plt.show()

3.2 繪製多個箱圖

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實戰

def plt_box_iamge(df):
    """
    snrr的五個範圍為[5,10)、[10,15)、[15,20)、[20,30)、[30-),按照五個snrr範圍計算對應redchi的箱圖
    :param df:包含snrr以及redchi的csv資料(dataFrame)。
    :return:
    """
	# 根據snrr範圍對redchi進行篩選。
    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])
    # 設定軸座標值刻度的標籤
    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)  # 篩選資料 (lamost資料應該在正常值範圍內,不然因為數值差過大會導致繪製不出影象!)
    plt_box_iamge(df_sc)

3.3 引數詳解

plt.boxplot(x,                      # x:指定要繪製箱圖的資料
            notch=None,           # notch:是否是凹口的形式展現箱線圖,預設非凹口
            sym=None,              # sym:指定異常點的形狀,預設為+號顯示
            vert=None,              # vert:是否需要將箱線圖垂直襬放,預設垂直襬放
            whis=None,             # whis:指定上下須與上下四分位的距離,預設為1.5倍的四分位差
            positions=None,   # positions:指定箱線圖的位置,預設為[0,1,2…]
            widths=None,         # widths:指定箱線圖的寬度,預設為0.5
            patch_artist=None,        # patch_artist:是否填充箱體的顏色
            meanline=None,             # meanline:是否用線的形式表示均值,預設用點來表示
            showmeans=None,       # showmeans:是否顯示均值,預設不顯示
            showcaps=None,           # showcaps:是否顯示箱線圖頂端和末端的兩條線,預設顯示
            showbox=None,             # showbox:是否顯示箱線圖的箱體,預設顯示
            showfliers=None,          # showfliers:是否顯示異常值,預設顯示
            boxprops=None,           # boxprops:設定箱體的屬性,如邊框色,填充色等
            labels=None,                  # labels:為箱線圖新增標籤,類似於圖例的作用
            flierprops=None,          # filerprops:設定異常值的屬性,如異常點的形狀、大小、填充色等
            medianprops=None,   # medianprops:設定中位數的屬性,如線的型別、粗細等
            meanprops=None,       # meanprops:設定均值的屬性,如點的大小、顏色等
            capprops=None,           # capprops:設定箱線圖頂端和末端線條的屬性,如顏色、粗細等
            whiskerprops=None)   # whiskerprops:設定須的屬性,如顏色、粗細、線的型別等

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])                               # 設定x軸值的範圍  rotation=30
# ax.set_xticks()  							      # 自定義x軸的值
ax.set_xlabel("xlabel")                  # 設定x軸的標籤
ax.set_xticklabels(['A','B','C','D'],  rotation=30,fontsize=10)   # 設定x軸座標值的標籤 旋轉角度 字型大小
ax.set_title("xcy")       					  # 設定影象標題
ax.legend(labels= ['A','B','C','D'],loc='best',)  # 增加圖例
ax.text(x=0.2 , y=3.5 , s="test" ,fontsize=12)   # 增加註

plt.show()

參考:
百度百科
matplotlib官方檔案

總結 

到此這篇關於Python使用plt.boxplot()函數繪製箱圖、常用方法以及含義詳解的文章就介紹到這了,更多相關plt.boxplot()函數繪製箱圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com