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

您所在的位置:网站首页 房价波动曲线图怎么画的 Python pandas数据制作箱线图实例(matplotlib,seaborn)

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

#Python pandas数据制作箱线图实例(matplotlib,seaborn)| 来源: 网络整理| 查看: 265

箱线图(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_artist与boxprops配合使用来设置箱体边缘的颜色和箱体填充的颜色,patch_artist=True,boxprops中color标签为箱体边框颜色,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)

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

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3