Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)

简介: Python绘图工具seaborn,教会你如何绘制更加精美的图形(二)

Hello,大家好,我是景天,今天我们探讨下seaborn根据分类数据类绘图的方法

用分类数据绘图

数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。


Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:


分类数据散点图: swarmplot()与 stripplot()。

类数据的分布图: boxplot() 与 violinplot()。

分类数据的统计估算图:barplot() 与 pointplot()。

下面两节将针对分类数据可绘制的图形进行简单介绍,具体内容如下


1 类别散点图

通过 stripplot()函数可以画一个散点图, stripplot0函数的语法格式如下。

seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)

参数解析:

x,y,hue:数据字段变量名,用于绘制长格式数据的输入

作用:根据实际数据,x,y常用来指定x,y轴的分类名称,

hue常用来指定第二次分类的数据类别(用颜色区分)


什么是长数据?

长数据一般是指数据集中的变量没有做明确的细分。即变量中至少有一个变量中的元素存在值严重重复循环的情况 (可以归为几类),如下表的北京市就重复了。表格整体的形状为长方形。即变量少而观察值多一列包含了所有的变量,而另一列则是与之相关的值

什么是宽数据?

宽数据是指数据集对所有的变量进行了明确的细分,各变量的值不存在重复环的情况也无法归类。数据总体的表现为 变量多而观察值少

每一列为一个变量,每一行为变量所对应的值


data: DataFrame,数组或数组列表


order,hue_order:字符串列表

作用:显式指定分类顺序,eg. order=[字段变量名1,字段变量名2,…]


jitter : float类型,True/1

作用:当数据重合较多时,用该参数做一些调整,也可以设置间距

如,jitter = 0.1 (通俗讲,就是让数据分散开)


dodge:bool

作用:若设置为True则沿着分类轴,将数据分离出来成为不同色调级别的条带,

否则,每个级别的点将相互叠加


orient:方向:v或者h

作用:设置图的绘制方向(垂直或水平),

如何选择:一般是根据输入变量的数据类型(dtype)推断出来。


color:matplotlib 颜色


palette:调色板名称,list类别或者字典

作用:用于对数据不同分类进行颜色区别


size:float

作用:设置标记大小(标记直径,以磅为单位)


edgecolor:matplotlib color,gray

作用:设置每个点的周围线条颜色


linewidth:float

作用:设置构图元素的线宽度


为了让大家更好地理解,接下来,通过 stripplot()函数绘制一个散点图,示例代码如下。

#获取tips数据

tips = sns.load_dataset(“tips”)


sns.stripplot(x=“day”, y=“total_bill”, data=tips)先看下数据

绘图:

加上hue,根据不同数据用不同颜色区分

sns.stripplot(x=“day”, y=“total_bill”, data=tips,hue=‘time’)


从上图中可以看出,图表中的横坐标是分类的数据,而且一些数据点会互相重叠,不易于观察。

为了解决这个问题,可以在调用striplot()函数时传入jitter参数,以调整横坐标的位置,改后的示例代码如下。

sns.stripplot(x=“day”, y=“total_bill”, data=tips, jitter=True)

#jitter=True,能够实现部分相同样本不重叠的散点图

除此之外,还可调用 swarmplot函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。

sns.swarmplot(x=“day”, y=“total_bill”, data=tips)



2 类别内的数据分布

要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:


箱形图:

  • 箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。
  • 箱形图于1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。


超出上下极限的单点为异常值

小提琴图:

  • 小提琴图 (Violin Plot) 用于显示数据分布及其概率密度。
  • 这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。
  • 中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
  • **箱形图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。**例如使用箱形图时,我们不能了解数据分布。虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息。



置信区间解释:

按照95%置信区间构造出来的区间,如果我构造出100个这样的区间,其中大约有95个会包含μ。

这就好像用渔网捞鱼,我知道一百次网下去,可能会有95次网到我想要的鱼,但是我并不知道是不是现在这一网。

2.1 绘制箱形图

seaborn中用于绘制箱形图的函数为 boxplot(),其语法格式如下:

seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)


参数详解:

x, y, hue:数据或向量数据中的变量名称

用于绘制长格式数据的输入。


data:DataFrame,数组,数组列表

用于绘图的数据集。如果x和y都缺失,那么数据将被视为宽格式。否则数据被视为长格式。


order, hue_order:字符串列表

控制分类变量(对应的条形图)的绘制顺序,若缺失则从数据中推断分类变量的顺序。


orient:“v”或“h”

控制绘图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。


color:matplotlib颜色

所有元素的颜色,或渐变调色板的种子颜色。


palette:调色板名称,列表或字典

用于hue变量的不同级别的颜色。可以从color_palette()得到一些解释,或者将色调级别映射到matplotlib颜色的字典,---- palette=[“r”,“g”,“b”,“y”]。


saturation:float

控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1。


width:float

不使用色调嵌套时完整元素的宽度,或主要分组变量一个级别的所有元素的宽度。


dodge:bool

使用色调嵌套时,元素是否应沿分类轴移动。


fliersize:float

用于表示异常值观察的标记的大小。


linewidth:float

构图元素的灰线宽度。


whis:float

控制在超过高低四分位数时 IQR (四分位间距)的比例,因此需要延长绘制的触须线段。超出此范围的点将被识别为异常值。


notch:boolean

是否使矩形框“凹陷”以指示中位数的置信区间。还可以通过plt.boxplot的一些参数来控制


ax:matplotlib轴

绘图时使用的 Axes 轴对象,否则使用当前 Axes 轴对象


kwargs:键值映射

其他在绘图时传给plt.boxplot的参数


使用 boxplot()函数绘制箱形图的具体示例如下。

sns.boxplot(x=“day”, y=“total_bill”, data=tips)先看下原始数据

看下绘制的图

上述示例中,使用 seaborn中内置的数据集tips绘制了一个箱形图,图中x轴的名称为day,其刻度范围是 Thur~Sun(周四至周日),y轴的名称为 total_bill,刻度范围为10-50左右


从图中可以看出:

  • Thur列大部分数据都小于30,不过有5个大于30的异常值,
  • Fri列中大部分数据都小于30,只有一个异常值大于40,
  • Sat一列中有3个大于40的异常值,
  • Sun列中有2个大于40的异常值


2.2 绘制提琴图

seaborn中用于绘制提琴图的函数为violinplot(),其语法格式如下

seaborn.violinplot(x=None, y=None, hue=None, data=None)


参数解析:

data:指定绘制小提琴图的数据集。

x:指定小提琴图的x轴数据。

y:指定小提琴图的y轴数据。

hue:指定一个分组变量。

order:传递一个字符串列表,用于分类变量的排序。

hue_order:传递一个字符串列表,用于分类变量hue值的排序。

bw:指定核密度估计的带宽,带宽越大,密度曲线越光滑。新版的即将废除,使用bw_method和bw_adjust

scale:用于调整小提琴图左右的宽度,如果为area,则表示每个小提琴图左右部分拥有相同的面积;如果为count,则表示根据样本数量来调节宽度;如果为width,则表示每个小提琴图左右两部分拥有相同的宽度。

scale_hue:bool类型参数,当使用hue参数时,是否对hue变量的每个水平做标准化处理,默认为True。

width:使用hue参数时,用于控制小提琴图的宽度。

inner:指定小提琴图内部数据点的形态,如果为box,则表示绘制微型的箱线图;如果为quartiles,则表示绘制四分位的分布图;如果为point或stick,则表示绘制点或小竖条。

split:bool类型参数,使用hue参数时,将小提琴图从中间分为两个不同的部分,默认为False。

dodge:bool类型的参数,当使用hue参数时,是否绘制水平交错的小提琴图,默认为True。

orient:指定小提琴图的呈现方向,默认为垂直方向。

linewidth:指定小提琴图的所有线条宽度。

color:指定小提琴图的颜色,该参数与palette参数一起使用时无效。

palette:指定hue变量的区分色。

saturation:指定颜色的透明度。

ax:指定子图的位置。

通过violinplot()函数绘制提琴图的示例代码如下

sns.violinplot(x=“day”, y=“total_bill”, data=tips)


上述示例中,使用seaborn中内置的数据集绘制了一个提琴图,图中x轴的名称为day,y轴的名称为total_bill


从图中可以看出:

  • Thur一列中位于5~25之间的数值较多,
  • Fri列中位于5-30之间的较多,
  • Sat-列中位于5-35之间的数值较多,
  • Sun一列中位于5-40之间的数值较多。


3 类别内的统计估计

要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。 Seaborn库中用于绘制这两种图表的具体函数如下

  • barplot()函数:绘制条形图。
  • pointplot()函数:绘制点图。


这些函数的API与上面那些函数都是一样的,这里只讲解函数的应用,不再过多对函数的语法进行讲解了。

3.1 绘制条形图

最常用的查看集中趋势的图形就是条形图。默认情况下, barplot函数会在整个数据集上使用均值进行估计。


若每个类别中有多个类别时(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(是指由样本统计量所构造的总体参数的估计区间),并使用误差条来表示置信区间。



使用 barplot()函数的示例如下

sns.barplot(x=“day”, y=“total_bill”, data=tips)


3.2 绘制点图

另外一种用于估计的图形是点图,可以调用 pointplot()函数进行绘制,该函数会用高度低计值对数据进行描述,而不是显示完整的条形,它只会绘制点估计和置信区间


通过 pointplot()函数绘制点图的示例如下。

sns.pointplot(x=“day”, y=“total_bill”, data=tips)


相关文章
|
1天前
|
数据可视化 数据挖掘 Python
【Python DataFrame专栏】DataFrame的可视化探索:使用matplotlib和seaborn
【5月更文挑战第20天】本文介绍了使用Python的pandas、matplotlib和seaborn库进行数据可视化的步骤,包括创建示例数据集、绘制折线图、柱状图、散点图、热力图、箱线图、小提琴图和饼图。这些图表有助于直观理解数据分布、关系和趋势,适用于数据分析中的探索性研究。
【Python DataFrame专栏】DataFrame的可视化探索:使用matplotlib和seaborn
|
3天前
|
程序员 开发者 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,它可以简洁地实现函数的增强、扩展和重用。本文将深入探讨Python中装饰器的工作原理、常见应用场景以及如何自定义装饰器,帮助读者更好地理解和运用这一重要的编程概念。
|
3天前
|
SQL 物联网 关系型数据库
sqlmap工具的使用 (超详细附工具版)_python sqlmap
sqlmap工具的使用 (超详细附工具版)_python sqlmap
|
6天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
29 0
|
6天前
|
前端开发 文件存储 Python
python之xhtml2pdf: HTML转PDF工具示例详解
python之xhtml2pdf: HTML转PDF工具示例详解
13 0
|
6天前
|
Python
Python 中的异常处理机制是一种强大的错误处理工具
【5月更文挑战第8天】Python的异常处理机制借助try/except结构管理错误,提高程序健壮性。异常是中断正常流程的问题,可由多种原因引发。基本结构包括try块(执行可能出错的代码)和except块(处理异常)。通过多个except块可捕获不同类型的异常,finally块确保无论是否异常都执行的代码。此外,raise语句用于主动抛出异常,自定义异常通过继承Exception类实现。with语句配合上下文管理器简化资源管理并确保异常情况下资源正确释放。
21 2
|
6天前
|
缓存 开发者 Python
《Python中的装饰器:优雅而强大的代码增强工具》
在现代软件开发中,Python语言的灵活性和简洁性备受推崇。其中,装饰器作为一种强大的代码增强工具,为Python开发者提供了优雅的解决方案。本文将深入探讨装饰器的原理、用法以及实际应用场景,帮助读者更好地理解和运用这一技术。
|
6天前
|
机器学习/深度学习 边缘计算 TensorFlow
【Python机器学习专栏】Python机器学习工具与库的未来展望
【4月更文挑战第30天】本文探讨了Python在机器学习中的关键角色,重点介绍了Scikit-learn、TensorFlow和PyTorch等流行库。随着技术进步,未来Python机器学习工具将聚焦自动化、智能化、可解释性和可信赖性,并促进跨领域创新,结合云端与边缘计算,为各领域应用带来更高效、可靠的解决方案。
|
19小时前
|
数据采集 算法 Python
2024年Python最全python基础入门:高阶函数,小米面试编程题
2024年Python最全python基础入门:高阶函数,小米面试编程题