sns.boxplot() ,df.plot.box(),df.boxplot()箱型圖
阿新 • • 發佈:2020-07-22
箱形圖(Box-plot):
又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組資料分散情況資料的統計圖。它能顯示出一組資料的最大值、最小值、中位數及上下四分位數
做模型時,經常使用箱型圖檢視特徵變數有沒有異常值
一、sns.boxplot()
#引數如下: seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)
引數說明:
x,y:dataframe中的列名(str)或者向量資料 data:dataframe或者陣列 hue(str):dataframe的列名,按照列名中的值分類形成分類的條形圖 palette:調色盤,控制影象的色調 order, hue_order (lists of strings):用於控制條形圖的順序 orient:"v"|"h" 用於控制影象使水平還是豎直顯示(這通常是從輸入變數的dtype推斷出來的,此引數一般當不傳入x、y,只傳入data的時候使用) fliersize:float,用於指示離群值觀察的標記大小 whis: 確定離群值的上下界(IQR超過低和高四分位數的比例),此範圍之外的點將被識別為異常值。IQR指的是上下四分位的差值。 width: float,控制箱型圖的寬度
使用iris資料集作為例子
x引數(箱型圖橫著放,預設也是橫著放)
%matplotlib inline import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_iris plt.rc("font",family="SimHei",size="15") #解決中文亂碼問題 data=pd.DataFrame(load_iris().data,columns=load_iris().feature_names) data['sample']=load_iris().target data.columns #x引數,下面結果都一致 sns.boxplot(x=data['sepal length (cm)']) sns.boxplot(x=data['sepal length (cm)'],data=data) sns.boxplot(x='sepal length (cm)',data=data) sns.boxplot(data['sepal length (cm)'])
y引數(豎著放)
#y引數,下面結果都一致 sns.boxplot(y=data['sepal length (cm)']) sns.boxplot(y=data['sepal length (cm)'],data=data) sns.boxplot(y='sepal length (cm)',data=data) sns.boxplot(y='sample',data=data)
#直接是data sns.boxplot(data=data)
#x,y同時使用,x的類別最要不要太多,最好是類別型(或者類別少的)為x,數值型(或者類別多的)為y sns.boxplot(x='sepal length (cm)',y='petal length (cm)',data=data) sns.boxplot(x='sepal length (cm)',y='sample',data=data) sns.boxplot(y='sepal length (cm)',x='sample',data=data)
#x,y,hue sns.boxplot(x='sepal length (cm)',y='petal length (cm)',hue='sample',data=data)
#用於控制影象使水平還是豎直顯示 fig,axes=plt.subplots(2,1) sns.boxplot(data=data,orient="v",palette="Set3",ax=axes[0]) #豎直顯示 sns.boxplot(data=data,orient="h",palette="Set3",ax=axes[1]) #水平顯示
#fliersize:float,用於指示離群值觀察的標記大小 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,ax=axes[0]) #fliersize預設為5 sns.boxplot(data=data,fliersize=20,ax=axes[1])
#whis: 確定離群值的上下界(IQR超過低和高四分位數的比例),此範圍之外的點將被識別為異常值。IQR指的是上下四分位的差值 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,whis=1,ax=axes[0]) #左圖 sns.boxplot(data=data,whis=2,ax=axes[1]) #右圖
#width: float,控制箱型圖的寬度 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,width=0.3,ax=axes[0]) #左圖 sns.boxplot(data=data,width=0.8,ax=axes[1]) #右圖
二、df.plot.box()反正就是df畫圖
#df.boxplot data.boxplot() data.plot.box() data['sample'].boxplot() #這樣不行 data['sepal length (cm)'].plot.box() data.boxplot('sepal length (cm)') data.boxplot(['sepal length (cm)']) data.boxplot(['sepal length (cm)','petal length (cm)'])
三、plt.boxplot(),看來x只有接收一個特徵時才比較適用
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:bool型別引數,是否填充箱體的顏色;預設為False meanline:bool型別引數,是否用線的形式表示均值,預設為False showmeans:bool型別引數,是否顯示均值,預設為False showcaps:bool型別引數,是否顯示箱線圖頂端和末端的兩條線(即上下須),預設為True showbox:bool型別引數,是否顯示箱線圖的箱體,預設為True showfliers:是否顯示異常值,預設為True boxprops:設定箱體的屬性,如邊框色,填充色等 labels:為箱線圖新增標籤,類似於圖例的作用 filerprops:設定異常值的屬性,如異常點的形狀、大小、填充色等 medianprops:設定中位數的屬性,如線的型別、粗細等 meanprops:設定均值的屬性,如點的大小、顏色等 capprops:設定箱線圖頂端和末端線條的屬性,如顏色、粗細等 whiskerprops:設定須的屬性,如顏色、粗細、線的型別等
#plt.boxplot(), plt.boxplot(x=data) #什麼鬼,看不清楚 plt.boxplot(x=data[['sample','petal length (cm)']]) #還是看不清楚 plt.boxplot(x=data['sepal length (cm)'])
全部程式碼如下:
# -*- coding: utf-8 -*- """ Created on Tue Jul 21 10:52:00 2020 @author: Admin """ %matplotlib inline import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_iris plt.rc("font",family="SimHei",size="15") #解決中文亂碼問題 data=pd.DataFrame(load_iris().data,columns=load_iris().feature_names) data['sample']=load_iris().target data.columns data.info() #x引數,下面結果都一致 sns.boxplot(x=data['sepal length (cm)']) sns.boxplot(x=data['sepal length (cm)'],data=data) sns.boxplot(x='sepal length (cm)',data=data) sns.boxplot(data['sepal length (cm)']) #y引數,下面結果都一致 sns.boxplot(y=data['sepal length (cm)']) sns.boxplot(y=data['sepal length (cm)'],data=data) sns.boxplot(y='sepal length (cm)',data=data) sns.boxplot(y='sample',data=data) #直接是data sns.boxplot(data=data) #x,y同時使用,x的類別最要不要太多,最好是類別型(或者類別少的)為x,數值型(或者類別多的)為y sns.boxplot(x='sepal length (cm)',y='petal length (cm)',data=data) sns.boxplot(x='sepal length (cm)',y='sample',data=data) sns.boxplot(y='sepal length (cm)',x='sample',data=data) sns.boxplot(x='sample',y='sepal length (cm)',data=data) #x,y,hue sns.boxplot(x='sepal length (cm)',y='petal length (cm)',hue='sample',data=data) #用於控制影象使水平還是豎直顯示 fig,axes=plt.subplots(2,1) sns.boxplot(data=data,orient="v",palette="Set3",ax=axes[0]) #豎直顯示 sns.boxplot(data=data,orient="h",palette="Set3",ax=axes[1]) #水平顯示 #fliersize:float,用於指示離群值觀察的標記大小 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,ax=axes[0]) #fliersize預設為5 sns.boxplot(data=data,fliersize=20,ax=axes[1]) #whis: 確定離群值的上下界(IQR超過低和高四分位數的比例),此範圍之外的點將被識別為異常值。IQR指的是上下四分位的差值 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,whis=1,ax=axes[0]) #左圖 sns.boxplot(data=data,whis=2,ax=axes[1]) #右圖 #width: float,控制箱型圖的寬度 fig,axes=plt.subplots(1,2) sns.boxplot(data=data,width=0.3,ax=axes[0]) #左圖 sns.boxplot(data=data,width=0.8,ax=axes[1]) #右圖 #df.boxplot data.boxplot() data.plot.box() data['sample'].boxplot() #這樣不行 data['sepal length (cm)'].plot.box() data.boxplot('sepal length (cm)') data.boxplot(['sepal length (cm)']) data.boxplot(['sepal length (cm)','petal length (cm)']) #plt.boxplot(), plt.boxplot(x=data) #什麼鬼,看不清楚 plt.boxplot(x=data[['sample','petal length (cm)']]) #還是看不清楚 plt.boxplot(x=data['sepal length (cm)'])