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)


相关文章
|
12天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
40 8
|
12天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
32 7
|
12天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
36 4
|
12天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
31 5
|
15天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
57 8
|
19天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
80 7
|
1月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
141 4
|
1月前
|
开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第41天】 在编程的世界中,效率与简洁是永恒的追求。本文将深入探讨Python编程语言中一个独特且强大的特性——列表推导式(List Comprehension)。我们将通过实际代码示例,展示如何利用这一工具简化代码、提升性能,并解决常见编程问题。无论你是初学者还是资深开发者,掌握列表推导式都将使你的Python之旅更加顺畅。
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
56 2