sns.boxplot() ,df.plot.box(),df.boxplot()箱型圖


箱形圖(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)'])

 還有一種

local.boxplot(column='loan_amt', by='have_localhouse_flag')

 

 這種效果和seaborn 的x,y賦值是一樣的,但是要記住類別少的放在x軸,數值型一般放在y軸

 

三、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)'])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM