zoukankan      html  css  js  c++  java
  • 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)'])
  • 相关阅读:
    推荐6款极具个性化的在线生成logo的网站
    网站图标制作
    关于域名如何指向WordPress homepage问题的解决
    WordPress 博客文章中google adsense广告展示方法之一
    WordPress网站搬家经验总结
    WordPress网站搬家的问题
    Linux RAID卡优化
    说说JSON和JSONP,也许你会豁然开朗
    可以嵌入程序的chrome
    maven jetty指定端口启动
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13362403.html
Copyright © 2011-2022 走看看