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)


相关文章
|
9天前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
25天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
27 2
|
25天前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。
|
26天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
53 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
29天前
|
数据可视化 数据挖掘 Python
Seaborn 库创建吸引人的统计图表
【10月更文挑战第11天】本文介绍了如何使用 Seaborn 库创建多种统计图表,包括散点图、箱线图、直方图、线性回归图、热力图等。通过具体示例和代码,展示了 Seaborn 在数据可视化中的强大功能和灵活性,帮助读者更好地理解和应用这一工具。
40 3
|
1月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
47 2
|
22天前
|
C语言 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第24天】在Python编程的世界中,追求代码的简洁性和可读性是永恒的主题。列表推导式(List Comprehensions)作为Python语言的一个特色功能,提供了一种优雅且高效的方法来创建和处理列表。本文将深入探讨列表推导式的使用场景、语法结构以及如何通过它简化日常编程任务。
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
7天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
7天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!