本文系统详解利用python中seaborn.boxplot绘制箱图boxplot。
seaborn.boxplot是matplotlib.pyplot.boxplot的封装版,
更个性化的设置请研究matplotlib.pyplot.boxplot
本文将了解到什么?
1、数据集准备及箱图简介
2、seaborn.boxplot箱图外观设置
默认参数绘制箱图箱图异常值属性设置 异常值关闭显示异常值marker大小设置异常值marker形状、填充色、轮廓设置
箱图上下横线属性设置 上下横线关闭上下横线颜色、线型、线宽等设置
箱图上下须线属性设置
箱图箱子设置箱子设置缺口箱子不填充颜色 箱子外框、内部填充色
箱图中位数线属性设置
箱图均值属性设置 均值使用点显示、设置点形状、填充色均值使用线显示 、线型、颜色设置
箱图中所有线属性设置 3、seaborn.boxplot分组箱图
分组绘图(方法一)
分组绘图(方法二)
箱子颜色设置 设置箱子颜色设置箱子颜色饱和度
箱子间距设置
每个小组再按子组绘图
按顺序绘制箱图
正文开始啦
线图用来展现数据的分布,能直观的展示数据的关键指标(如下四分位数、上四分位数、中位数、最大值、最小值、离散点/异常值点);箱线图可直观展示不同组数据的差异;下面详细介绍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(150, 1))),columns=['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(cm)','class'] )
查看数据集样子? pd_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
上面注释部分很好的解释了下面箱图中四分位数的含义
2、seaborn.boxplot箱图外观设置
默认参数绘制箱图
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],#传入一组数据orient='v'#箱子垂直显示,默认为'h'水平显示)
plt.show()

箱图异常值属性设置
异常值关闭显示
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],showfliers=False,#异常值关闭显示)
plt.show()

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

异常值marker形状、填充色、轮廓设置
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],orient='v',flierprops = {'marker':'o',#异常值形状'markerfacecolor':'red',#形状填充色'color':'black',#形状外廓颜色},)
plt.show()

箱图上下横线属性设置
上下横线关闭
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],showcaps=False,#上下横线关闭)
plt.show()

上下横线颜色、线型、线宽等设置
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],capprops={'linestyle':'--','color':'red'},#设置上下横线属性)
plt.show()

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

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

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

箱子外框、内部填充色
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],boxprops = {'color':'red',#箱子外框'facecolor':'pink'#箱子填充色},#设置箱子属性)
plt.show()

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

**箱图均值属性设置 **
均值使用点显示、设置点形状、填充色
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],showmeans=True,#箱图显示均值,meanprops = {'marker':'D','markerfacecolor':'red'},#设置均值属性)
plt.show()

均值使用线显示 、线型、颜色设置
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],showmeans=True,#箱图显示均值,meanline=True,#显示均值线meanprops = {'linestyle':'--','color':'red'},#设置均值线属性)
plt.show()

箱图中所有线属性设置
plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],orient='v',linewidth=8#设置箱子等线的宽度)
plt.show()

3、seaborn.boxplot分组箱图
分组绘图(方法一)
plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for 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()

分组绘图(方法二)
plt.figure(dpi=100)
sns.boxplot(x='class',y='sepal width(cm)',data=pd_iris,#data的作用就是x,y每次不需要输入pd_irisorient='v')
plt.show()

箱子颜色设置
设置箱子颜色
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()

设置箱子颜色饱和度
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()

箱子间距设置
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()

每个小组再按子组绘图
plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for 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()

按顺序绘制箱图
plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for 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()

4、参考资料
以上涉及到单颜色设置,详细见:Python可视化|matplotlib05-内置单颜色(一);Python可视化|matplotlib06-外部单颜色(二);
涉及到colormap设置,详细见:Python可视化|matplotlib07-自带颜色条Colormap(三);Python可视化|08-Palettable库中颜色条Colormap(四)
涉及到marker及linestyle设置,详细见:Python可视化|matplotlib03-一文掌握marker和linestyle使用
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html?highlight=boxplot#matplotlib.pyplot.boxplot
http://seaborn.pydata.org/generated/seaborn.boxplot.html#seaborn.boxplot
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件
本站qq群955171419,加入微信群请扫码: