天天看點

python 繪制箱型圖_Python箱型圖繪制與特征值擷取過程解析

這篇文章主要介紹了Python箱型圖繪制與特征值擷取過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

它主要用于反映原始資料分布的特征,還可以進行多組資料分布特征的比較

python 繪制箱型圖_Python箱型圖繪制與特征值擷取過程解析

如何利用Python繪制箱型圖

需要的import的包

import matplotlib.pyplot as plt

from matplotlib.font_manager import FontProperties

import numpy as np

import pandas as pd

該函數是繪制多箱型圖,且資料長度不一緻的情況,input_dict = {filename1:[a1,a2,...,an],filename2:[b1,b2,...,bn]...} Y_label = 'Img_name'

def DrawMultBoxPic(input_dict,Y_label):

dict_list_length = []

for item in input_dict:

temp_length = len(input_dict[item])

dict_list_length.append(temp_length)

# 擷取最長清單長度

max_length = max(dict_list_length)

# 每個清單在後面追加None

for item in input_dict:

diff_length = max_length - len(input_dict[item])

if diff_length > 0:

for i in range(diff_length):

input_dict[item].append(None)

# else:

# print('{}檔案清單長度最長'.format(item))

# 繪制箱型圖

zhfont = FontProperties(fname='C:/Windows/Fonts/simsun.ttc', size=16)

data = pd.DataFrame.from_dict(input_dict)

data.boxplot(widths=0.3,figsize=(30,15),fontsize=16)

plt.xlabel(u'煤質檔案名稱', fontproperties=zhfont)

plt.ylabel(Y_label, fontproperties=zhfont)

plt.title(Y_label, fontproperties=zhfont)

# plt.axis([0, 6, 0, 90])

plt.grid(axis='y', ls='--', lw=2, color='gray', alpha=0.4)

plt.grid(axis='x', ls='--', lw=2, color='gray', alpha=0.4)

imgname = 'E:\\' + Y_label + '.png'

plt.savefig(imgname, bbox_inches = 'tight')

# plt.show()

結果顯示

python 繪制箱型圖_Python箱型圖繪制與特征值擷取過程解析

如何擷取箱型圖特征

"""

【函數說明】擷取箱體圖特征

【輸入】 input_list 輸入資料清單

【輸出】 out_list:清單的特征[下限,Q1,Q2,Q3,上限] 和 Error_Point_num:異常值數量

【版本】 V1.0.0

【日期】 2019 10 16

"""

def BoxFeature(input_list):

# 擷取箱體圖特征

percentile = np.percentile(input_list, (25, 50, 75), interpolation='linear')

#以下為箱線圖的五個特征值

Q1 = percentile[0]#上四分位數

Q2 = percentile[1]

Q3 = percentile[2]#下四分位數

IQR = Q3 - Q1#四分位距

ulim = Q3 + 1.5*IQR#上限 非異常範圍内的最大值

llim = Q1 - 1.5*IQR#下限 非異常範圍内的最小值

# llim = 0 if llim < 0 else llim

# out_list = [llim,Q1,Q2,Q3,ulim]

# 統計異常點個數

# 正常資料清單

right_list = []

Error_Point_num = 0

value_total = 0

average_num = 0

for item in input_list:

if item < llim or item > ulim:

Error_Point_num += 1

else:

right_list.append(item)

value_total += item

average_num += 1

average_value = value_total/average_num

# 特征值保留一位小數

out_list = [average_value,min(right_list), Q1, Q2, Q3, max(right_list)]

# print(out_list)

out_list = Save1point(out_list)

return out_list,Error_Point_num

以上就是本文的全部内容,希望對大家的學習有所幫助

您可能感興趣的文章: