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)'])
分类:
画图(sns,plt,plot)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)