【Python】箱图boxplot--统计数据、观察数据利器

机器学习初学者

共 6816字,需浏览 14分钟

 ·

2021-11-30 17:14

本文系统详解利用pythonseaborn.boxplot绘制箱图boxplotseaborn.boxplotmatplotlib.pyplot.boxplot的封装版,更个性化的设置请研究matplotlib.pyplot.boxplot

本文将了解到什么?

1、数据集准备及箱图简介2、seaborn.boxplot箱图外观设置默认参数绘制箱图  箱图异常值属性设置   异常值关闭显示  异常值marker大小设置  异常值marker形状、填充色、轮廓设置箱图上下横线属性设置   上下横线关闭  上下横线颜色、线型、线宽等设置箱图上下须线属性设置箱图箱子设置  箱子设置缺口  箱子不填充颜色   箱子外框、内部填充色 箱图中位数线属性设置 箱图均值属性设置   均值使用点显示、设置点形状、填充色  均值使用线显示 、线型、颜色设置箱图中所有线属性设置 

3、seaborn.boxplot分组箱图分组绘图(方法一)分组绘图(方法二)箱子颜色设置 设置箱子颜色 设置箱子颜色饱和度箱子间距设置 每个小组再按子组绘图 按顺序绘制箱图


正文开始啦5409fbcd8fe2f19161e905517076a6ac.webp一个箱图的主要组成原件线图用来展现数据的分布,能直观的展示数据的关键指标(如下四分位数、上四分位数、中位数、最大值、最小值、离散点/异常值点);箱线图可直观展示不同组数据的差异;下面详细介绍python中matplotlib及seaborn库绘制箱图。1、数据集准备及箱图简介

还是使用鸢尾花数据集iris,iris详细介绍请戳:Python可视化|matplotlib10-绘制散点图scatter

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import seaborn as sns
import palettable
from sklearn import datasets 


plt.rcParams['font.sans-serif']=['SimHei']  # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用于显示中文

iris=datasets.load_iris()
x, y = iris.data, iris.target
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(1501))),columns=['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(cm)','class'] )

查看数据集样子? cc2be2f7923de637f3e367b1ca96de3d.webppd_iris["sepal width(cm)"]简单统计,后文主要使用该列数据集绘图

pd_iris["sepal width(cm)"].describe()#以上各个值其实都可以使用describe函数查看

count    150.000000
mean       3.054000
std        0.433594
min        2.000000
25%        2.800000(下四分位数,25% 的数据小于等于此值。)
50%        3.000000(中位数,50% 的数据小于等于此值。)
75%        3.300000(上四分位数,75% 的数据小于等于此值。)
max        4.400000
Name: sepal width(cm), dtype: float64

上面注释部分很好的解释了下面箱图中四分位数的含义  daa89a9bf8102e12d53f9a0f2aeb9fe3.webp


2、seaborn.boxplot箱图外观设置
  • 默认参数绘制箱图

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],#传入一组数据
            orient='v'#箱子垂直显示,默认为'h'水平显示
           )
plt.show()
59f3864c3b4235d3715b0202aca3ba95.webp
  • 箱图异常值属性设置

异常值关闭显示

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showfliers=False,#异常值关闭显示
           )
plt.show()
dfaec7f273256d54efacc874ed85bf60.webp

异常值marker大小设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            fliersize=15,#设置离散值marker大小,默认为5
           )
plt.show()
de7c516d656035eb2e0c52c3e2aab46d.webp

异常值marker形状、填充色、轮廓设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            flierprops = {'marker':'o',#异常值形状
                          'markerfacecolor':'red',#形状填充色
                          'color':'black',#形状外廓颜色
                         },
           )
plt.show()
25c7d52b9d4ec4fae6a704064c3ebd04.webp
  • 箱图上下横线属性设置

上下横线关闭

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showcaps=False,#上下横线关闭
           )
plt.show()
4eca7d24f9295683bd0170c917646a9e.webp

上下横线颜色、线型、线宽等设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            capprops={'linestyle':'--','color':'red'},#设置上下横线属性
           )
plt.show()
b5bfe8eda1877f34dbf031b147d0cf34.webp
  • 箱图上下须线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            whiskerprops={'linestyle':'--','color':'red'},#设置上下须属性
           )
plt.show()
91e33a7f5e728347802a5f329331b1c9.webp
  • 箱图箱子设置

箱子设置缺口

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            notch=True,#箱子设置缺口
           )
plt.show()
8cbcbcf532454a38b65a0125f4c2586b.webp

箱子不填充颜色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            color='white',#箱子不填充
           )
plt.show()
df79387029115e76b9b0df0f48c5a7f4.webp

箱子外框、内部填充色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
           boxprops = {'color':'red',#箱子外框
           'facecolor':'pink'#箱子填充色
           },#设置箱子属性
           )
plt.show()
1587dcf429a654dc6361593b0bd7ad02.webp
  • 箱图中位数线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
           medianprops = {'linestyle':'--','color':'red'},#设置中位数线线型及颜色
           )
plt.show()
bacded113540462972dd0992da7c7bab.webp
  • **箱图均值属性设置 **

均值使用点显示、设置点形状、填充色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showmeans=True,#箱图显示均值,
            meanprops = {'marker':'D','markerfacecolor':'red'},#设置均值属性
           )
plt.show()
0a55cdcf477b0d77206ded68cb39bed6.webp

均值使用线显示 、线型、颜色设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showmeans=True,#箱图显示均值,
            meanline=True,#显示均值线
            meanprops = {'linestyle':'--','color':'red'},#设置均值线属性
           )
plt.show()
ab762d9d29621c59a88f25097bc19d7f.webp
  • 箱图中所有线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            linewidth=8#设置箱子等线的宽度
           )
plt.show()
f099d67703fdc65b3e7ce8ab25ec8daf.webp
3、seaborn.boxplot分组箱图
  • 分组绘图(方法一)

plt.figure(dpi=100)
class_name=[iris.target_names[0if i==0.0 else iris.target_names[1if i==1.0 else iris.target_names[2for i in pd_iris['class']]
sns.boxplot(x=class_name,#按照pd_iris["sepal width(cm)"]分组,即按照每种鸢尾花('setosa', 'versicolor', 'virginica')分组绘图
            y=pd_iris["sepal width(cm)"],#绘图数据
            orient='v'
           )
plt.show()
da9e57376600ebfe85180af4fa6fd81c.webp
  • 分组绘图(方法二)

plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,#data的作用就是x,y每次不需要输入pd_iris
            orient='v'
           )
plt.show()
69fd2b099d2bbfecb8cc1c1d47f33328.webp
  • 箱子颜色设置

设置箱子颜色

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,#设置每个箱子颜色
           )
plt.show()
b126a7c34150a2d011f6e55efe7f165a.webp

设置箱子颜色饱和度

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,
            saturation=0.3,#设置颜色饱和度
           )
plt.show()
578945313b41c65d7be953657a0649b1.webp
  • 箱子间距设置

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,
            saturation=0.3,#设置颜色饱和度
            width=1.0,#设置箱子之间距离,为1时,每个箱子之间距离为0
           )
plt.show()
ad592ad6346bbf179019b7da2f362faa.webp
  • 每个小组再按子组绘图

plt.figure(dpi=100)
class_name=[iris.target_names[0if i==0.0 else iris.target_names[1if i==1.0 else iris.target_names[2for i in pd_iris['class']]
sns.boxplot(x=class_name,
            y=pd_iris['sepal width(cm)'],
            hue=pd_iris['petal width(cm)'],#每类按照子类分组:上图三类再按照'sepal width(cm)'分组绘图
            orient='v'
           )
plt.show()
3d7cae935e23eb424561bc3fbb0b8ded.webp
  • 按顺序绘制箱图

plt.figure(dpi=100)
class_name=[iris.target_names[0if i==0.0 else iris.target_names[1if i==1.0 else iris.target_names[2for i in pd_iris['class']]
sns.boxplot(x=class_name,
            y=pd_iris["sepal width(cm)"],
            hue=pd_iris['petal width(cm)'],
            order=["virginica""versicolor""setosa"],#设置箱子的显示顺序
            hue_order=sorted(list(pd_iris['petal width(cm)'].unique())),#设置每个子类中箱子的显示顺序,此处设置从小到大排序
            orient='v'
           )
plt.show()
a73983d35cc4994fed34d0efb59798c8.webp
4、参考资料
往期精彩回顾



站qq群955171419,加入微信群请扫码:
浏览 135
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报