常用绘图之箱型图

箱型图

在这里插入图片描述
使用数据为鸢尾花数据集(http://archive.ics.uci.edu/ml/datasets/Iris)
数据包含5列,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度、鸢尾花种类。
鸢尾花属种类包含三种:iris-setosa, iris-versicolour, iris-virginica
在这里插入图片描述

可以应用pandas自带的describe()或者numpy的percentile()统计上下四分位数和中位数

在这里插入图片描述

1.利用Matplotlib绘制 boxplot ()

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=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, manage_xticks=True, autorange=False, zorder=None, hold=None, data=None)

参数说明参数说明
x指定要绘制箱型图数据showcaps是否显示箱型图顶端和末端的两条线
notch是否是凹凸的形式展现箱型图showbox是否显示箱型图的箱体
sym指定异常点的形状showfilters是否显示异常值
vert是否需要将箱型图垂直摆放boxprops设置箱体的属性,如边框色,填充色等
whis指定上下须与上下四分位的距离labels为箱型图添加标签
positions指定箱型图的位置flierprops设置异常值的属性
widths指定箱型图的宽度medianprops设置中位数属性
patch_artist是否填充箱体的颜色meanprops设置均值的属性
meanline是否用线的形式表示均值capprops设置箱型图顶端和末端线条的属性
showmeans是否显示均值whiskerprops设置须的属性
详见参考文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.boxplot

基本用法

import matplotlib.pyplot as plt
#不显示警告信息
import warnings
warnings.filterwarnings('ignore')
import matplotlib as mpl
# 中文和负号的正常显示
mpl.rcParams['font.sans-serif'] = ['Times New Roman']
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
box_1=data[data['label']=="Iris-setosa"]['sepal_len']
box_2=data[data['label']=="Iris-versicolor"]['sepal_len']
box_3=data[data['label']=="Iris-virginica"]['sepal_len']
plt.figure(figsize=(10,5))
labels = 'sepal_len','Iris-versicolor','sepal_len'
plt.boxplot([box_1, box_2, box_3], labels = labels)#grid=False:代表不显示背景中的网格线
plt.title('Sepal_len',fontsize=14)
plt.xlabel('鸢尾花种类',fontsize =12)
plt.ylabel('花萼长度',fontsize =12)
plt.show

在这里插入图片描述

加上均值信息

showmeans=True代表显示均值(默认是小三角形)
meanline=True代表以线的形式显示均值

plt.boxplot([box_1, box_2, box_3], labels = labels,showmeans=True)

在这里插入图片描述

plt.boxplot([box_1, box_2, box_3], labels = labels,showmeans=True,meanline=True)

在这里插入图片描述

改变箱型图颜色

patch_artist = True代表填充箱体颜色

要配合boxprops使用(设置箱体属性,如边框色color,填充色facecolor)

plt.boxplot([box_1, box_2, box_3], labels = labels,showmeans=True,meanline=True,
            patch_artist = True, boxprops = {'color':'orangered','facecolor':'pink'})

在这里插入图片描述

绘制水平箱型图

vert=False代表绘制水平的箱型图,默认为True
(注意此时x,y轴的标题要跟绘制垂直图时互换xy轴调整)

plt.boxplot([box_1, box_2, box_3], labels = labels,showmeans=True,meanline=True,
            patch_artist = True, boxprops = {'color':'orangered','facecolor':'pink'},vert=False)

在这里插入图片描述

2.利用dataframe绘制

DataFrame.boxplot(column=None, by=None, ax=None,showmeans=False, fontsize=None, rot=0, grid=True, figsize=None, layout=None, return_type=None, …)

参数说明参数说明
column根据哪一列绘图by根据哪几列分组
ax绘图所用axfontsize字体大小
grid是否显示网格figsize图板大小,tuple
layout(3,5)代表3行5列return_type{“axes”,“dict”,“both”} or None,默认axes
rot代表分组的标签偏移角度(度为单位)**kwargs跟matplotlib.pyplot.boxplot()一致的参数

基本用法

fig,ax= plt.subplots(1,1,figsize=(10,6))
data.boxplot(column=['sepal_len'],by=['label'],ax=ax)
# column参数表示要绘制成箱形图的数据,可以是一列或多列
# by参数表示分组依据,可以是一列或多列
ax.set_ylabel('花萼长度',fontsize =12)
ax.set_xlabel('鸢尾花种类',fontsize =12)
ax.set_title('Sepal_len',fontsize=14)
plt.show()

在这里插入图片描述
column参数也可以指定多列,配合layout参数使用(几行几列布局)

fig,ax= plt.subplots(1,1,figsize=(10,6))
data.boxplot(column=['sepal_len','sepal_wid'],by=['label'],ax=ax,layout=(2,1))
# column参数表示要绘制成箱形图的数据,可以是一列或多列
# by参数表示分组依据,可以是一列或多列
plt.show()

在这里插入图片描述

加上matplotlib里的各种信息

plt.figure(figsize=(20,4))
ff = data.boxplot(column=['sepal_len','sepal_wid'],
                 by=['label'],
                  layout=(2,1),#图像布局
                 sym = 'o',  # 异常点形状,参考marker
               vert = True,  # 是否垂直
               whis = 1.5,  # IQR,默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置
               patch_artist = False,  # 上下四分位框内是否填充,True为填充
               meanline = True, showmeans=True,  # 是否有均值线及其形状
               showbox = True,  # 是否显示箱线
               showcaps = True,  # 是否显示边缘线
               showfliers = True,  # 是否显示异常值
               notch = False,  # 中间箱体是否缺口
               return_type="dict"# 返回类型为字典
              ) 
plt.title('my boxplot')
for f in ff:
    for whisker in f['whiskers']:
        whisker.set(color='k', linewidth=0.5,linestyle='-')
    for cap in f['caps']:
        cap.set(color='gray', linewidth=2)
    for median in f['medians']:
        median.set(color='DarkBlue', linewidth=2)
    for flier in f['fliers']:
        flier.set(marker='o', color='y', alpha=0.5)
# medians, 中位值的横线,
# whiskers, 从box到error bar之间的竖线.
# fliers, 异常值
# caps, error bar横线
# means, 均值的横线

在这里插入图片描述

3.利用senborn绘制

基本用法

  • 直接应用某列数据绘制箱型图
import seaborn as sns
ax = sns.boxplot(x=data["sepal_len"])

在这里插入图片描述

  • 对data中的多列数值型数据绘制箱型图
ax = sns.boxplot(data=data,orient="h", palette="Set2")

在这里插入图片描述
注意返回的是ax,我们就可以继续给他加x,y轴标题等信息了

分组绘制

按照某列分组针对某属性绘制箱型图

  • 利用x,y分别指定分组依据和绘制列(垂直图时)
import seaborn as sns
ax = sns.boxplot(x="label", y="sepal_len", data=data)

在这里插入图片描述

  • 与x,y配合使用hue指定二级分类
ax = sns.boxplot(x="day", y="total_bill", hue="smoker",
                 data=tips, palette="Set3")

在这里插入图片描述

g = sns.catplot(x="sex", y="total_bill",
                hue="smoker", col="time",
                data=tips, kind="box",
                height=4, aspect=.7);

在这里插入图片描述
(本文数据不方便应用hue参数,代码和图为官网示例)

绘制水平箱型图

设置orient="h"画水平箱型图
(需要互换x,y轴对应数据)

ax = sns.boxplot(y="label", x="sepal_len",data=data,orient="h")

在这里插入图片描述

加上茎叶图

ax = sns.boxplot(x="label", y="sepal_len", data=data)
ax = sns.swarmplot(x="label", y="sepal_len", data=data, color=".25")

在这里插入图片描述
更多见http://seaborn.pydata.org/generated/seaborn.boxplot.html#seaborn.boxplot

参考

Python实现箱形图的绘制
python数据可视化:箱型图

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fff2zrx

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值