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

 

posted on 2020-07-22 18:14  小小喽啰  阅读(8987)  评论(0编辑  收藏  举报