首頁 > 軟體

Python Matplotlib繪製箱線圖boxplot()函數詳解

2022-07-13 14:01:51

箱線圖

箱線圖一般用來展現資料的分佈,如上下四分位值、中位數等,也可以直觀地展示異常點。Matplotlib提供了boxplot()函數繪製箱線圖。

import matplotlib.pyplot as plt
_ = plt.boxplot(range(10))  # 10個數,0-9
plt.show()

箱線圖雖然看起來簡單,但包含的資料資訊非常豐富。在上圖中,橙色的線條表示中位數,中間條形的上下邊界分別對應上四分位數(75%的資料都小於該值)與下四位分數(25%的資料小於該值),從條形延伸出兩條線段,兩條線段的終點表示資料的最大值最小值

import numpy as np

print(np.median(np.arange(10)))  # 中位數
print(np.percentile(np.arange(10), 25))  # 下4分位數,也叫第1分位數
print(np.percentile(np.arange(10), 75))  # 上4分位數,也叫第3分位數
4.5
2.25
6.75

Process finished with exit code 0

boxplot()函數還提供了豐富的自定義選項

plt.boxplot(x, notch=None, sym=None, vert=None,
            whis=None, positions=None, widths=None,
            patch_artist=None, meanline=None, showmeans=None,
            showcaps=None, showbox=None, showfliers=None,
            boxprops=None, labels=None, flierprops=None,
            medianprops=None, meanprops=None,
            capprops=None, whiskerprops=None)

x :繪圖資料。

notch :是否以凹口的形式展現箱線圖,預設非凹口。

sym:指定異常點的形狀,預設為+號顯示。

vert :是否需要將箱線圖垂直放,預設垂直放。

whis :指定上下須與上下四分位的距離,預設為1.5倍的四分位差。

positions :指定箱線圖位置,預設為[0,1,2.…]。

widths :指定箱線圖寬度,預設為0.5。

patch _ artist :是否填充箱體的顏色。

meanline :是否用線的形式表示均值,預設用點表示。

showmeans :是否顯示均值,預設不顯示。

showcaps :是否顯示箱線圖頂端和末端兩條線,預設顯示。

showbox :是否顯示箱線圖的箱體,預設顯示。

showfliers :是否顯示異常值,預設顯示。

boxprops :設定箱體的屬性,如邊框色、填充色等。

labels :為箱線圖新增標籤,類似於圖例的作用。

filerprops :設定異常值的屬性,如異常點的形狀、大小、填充色等。

medianprops :設定中位數的屬性,如線的型別、粗細等。

meanprops :設定均值的屬性,如點的大小、顏色等。

capprops :設定箱線圖頂端和末端線條的屬性,如顏色、粗細等。

whiskerprops :設定須的屬性,如顏色、粗細、線的型別等。

箱線圖通常用在多組資料比較

下面程式碼展示了3組簡單資料的箱線圖,新增凹口、均值點、顏色以及每組的標籤。

import matplotlib.pyplot as plt

a = plt.boxplot([range(10), range(20), range(30)],
                patch_artist=True,
                boxprops={'color': 'blue'},
                notch=True, showmeans=True,
                labels=['A', 'B', 'C'])
plt.show()

補充:plt.boxplot()函數繪製箱圖、常用方法

實戰

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)

常用方法

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()

總結 

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


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