Python pandas数据制作箱线图实例(matplotlib,seaborn)

箱线图(Box-plot)是用来显示一组或多组数据分布特征的统计图。关于箱线图具体信息,可以参考箱线图详解
我们需要对以下数据中的charges值做出箱线图,并且按照不同性别分组展现。源数据下载

在这里插入图片描述
1、使用matplotlib的boxplot()函数制作箱线图

matplotlib中制作箱线图的函数为boxplot()。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#解决中文乱码问题
plt.rcParams["font.size"]=10#设置字体大小
plt.boxplot([data.charges[data.sex=='male'],data.charges[data.sex=='female']],labels=['male','female'])
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

绘制的箱线图如下图所示,图中数据点包括上四分位数、下四分位数、上边缘、下边缘、中位数以及异常值。男性相较于女性保费分布更广,意味着有更多的男性有着高保费。

在这里插入图片描述

如果想对以上箱线图形状做修饰的话,可以通过设置参数来完成。
(1)vert=Fasle:水平箱线图;
(2)showmeans=True:显示均值;
(3)nort=True:改变箱体的形状,突出中位数的置信区间;
(4)sym=’*’:异常值标注形状;
(5)patch_artistboxprops配合使用来设置箱体边缘的颜色和箱体填充的颜色,patch_artist=True,boxpropscolor标签为箱体边框颜色,facecolor标签为箱体填充颜色。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#解决中文乱码问题
plt.rcParams["font.size"]=10#设置字体大小
plt.boxplot([data.charges[data.sex=='male'],data.charges[data.sex=='female']],labels=['male','female'],notch=True,sym='*',vert=False,showmeans=True,patch_artist=True,boxprops = {'color':'orangered','facecolor':'pink'})
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

修饰后的水平箱线图如下图所示。

在这里插入图片描述

2、使用seaborn中的boxplot()函数制作箱线图

seaborn是在matplotlib基础上面的封装的可视化模块,代码更简洁,定制化能力稍差。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxplot(y='charges',data=data,x='sex')
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

绘制的箱线图如下图所示,图中数据点包括上四分位数、下四分位数、上边缘、下边缘、中位数以及异常值。

在这里插入图片描述

水平箱线图无需设置专门的参数,只需要将x,y值调换即可。绘制的水平箱线图图下图所示。

在这里插入图片描述

通常默认的异常值范围为大于 (上四分位数
+1.5倍四分位数差)的值,或者小于(下四分位数-1.5倍四分位数差)的值,即大于Q3+1.5IQR或小于Q1-1.5IQR的值划为异常值(outliers)。可以通过whis参数可以改变IQR的因数大小进而改变异常值范围。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxplot(x='charges',data=data,y='sex',whis=3)
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

异常值更改后的箱线图如下图所示:

在这里插入图片描述

通过设置hue参数在箱线图中嵌套分组。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxplot(y='charges',data=data,x='sex',hue='smoker')
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

嵌套分组后的箱形图如下图所示,在男性保费分布广于女性保费的基础上,无论是男性还是女性,吸烟者相比于不吸烟者的保费分布更广,意味着更多的吸烟者有着高保费。

在这里插入图片描述

如果想对以上箱线图继续修饰的话,可以通过设置其他参数来完成。
(1)order:显式传入参数指定顺序控制箱线图的显示顺序,hue_order则用于指定嵌套分组的显示顺序;
(2)palette:修改每个类别的颜色;
(3)saturation:类别颜色饱和度;
(4)fliersize:修改异常点大小;
(5)notch:改变箱体的形状,突出中位数的置信区间;

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxplot(y='charges',data=data,x='sex',hue='smoker',order=['male','female'],palette='Set3',saturation=1.5,fliersize=4,notch=True,hue_order=['no','yes'])
plt.title('男女保费分布箱线图')
plt.savefig('gender.png',dpi=400)

在这里插入图片描述

3、使用seaborn中的boxenplot()函数制作增强型箱线图
一、什么是增强型箱线图

boxenplot用于为更大的数据集绘制增强的箱型图。这种风格的绘图最初被命名为“信值图”,因为它显示了大量被定义为“置信区间”的分位数。它类似于绘制分布的非参数表示的箱形图,其中所有特征对应于实际观察的数值点。通过绘制更多分位数,它提供了有关分布形状的更多信息,特别是尾部数据的分布。

二、语法

seaborn.boxenplot(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,
                  k_depth='proportion',linewidth=None, scale='exponential', outlier_prop=None,
                  ax=None, **kwargs)

大部分参数与boxplot相同,独有的参数有k_depth,scale,outlier_prop。
(1)k_depth:“proportion” 或 “tukey” 或 “trustworthy”
通过增大百分比的粒度控制绘制的盒形图数目。每个参数代表利用不同的统计特性对异常值的数量做出不同的假设。
(2)scale:“linear” 或 “exponential” 或 “area”
用于控制增强箱线图宽度的方法。所有参数都会给显示效果造成影响。 “linear” 通过恒定的线性因子减小宽度,“exponential” 使用未覆盖的数据的比例调整宽度, “area” 与所覆盖的数据的百分比成比例。
(3)outlier_prop
被认为是异常值的数据比例。与 k_depth 结合使用以确定要绘制的百分位数。默认值为 0.007 作为异常值的比例。该参数取值应在[0,1]范围内。

三、实例

根据分类变量分组绘制一个纵向的增强箱线图。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxenplot(x='sex',y='charges',data=data)
plt.savefig('gender.png',dpi=400)

绘制的增强型箱线图如下图所示:

在这里插入图片描述

通过设置hue参数在增强型箱线图中嵌套分组。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxenplot(x='sex',y='charges',data=data,hue='smoker')
plt.savefig('gender.png',dpi=400)

嵌套分组后的增强型箱线图如下图所示:

在这里插入图片描述

通过k_depth参数改变箱线图的数目。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxenplot(x='sex',y='charges',data=data,hue='smoker',k_depth='tukey')
plt.savefig('gender.png',dpi=400)

箱线数目改变后如下图所示:

在这里插入图片描述

通过scale参数控制箱线图的宽度。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxenplot(x='sex',y='charges',data=data,hue='smoker',scale='linear',k_depth='proportion')
plt.savefig('gender.png',dpi=400)

宽度改变以后的箱线图如下图所示:

在这里插入图片描述

通过outlier_prop参数改变异常值的比例。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})#设置图表背景颜色字体
sns.boxenplot(x='sex',y='charges',data=data,hue='smoker',scale='linear',k_depth='proportion',outlier_prop=0.01)
plt.savefig('gender.png',dpi=400)

异常值比例改变后的箱线图如下图所示:

在这里插入图片描述

  • 32
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值