Seaborn和Matplotlib都是Python可视化库,它们都可以用于创建各种类型的图表。但是,Seaborn 和Matplotlib在概念和设计上有一些不同。
Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂,它里面有上千个函数和参数,属于典型的那种可以用它做任何事,却无从下手。
Seaborn基于Matplotlib核心库进行了更高级的APl封装,可以轻松地画出更漂亮的图形,而Seaborn的漂亮主要体现在配色更加舒服,以及图形元素的样式更加细腻。以下是两者之间的区别所在:
设计理念上的差异: Matplotlib是一个基础绘图库,提供了多种绘图工具,但大部分需要手动设置图表的各种属性。Seaborn则是在Matplotlib的基础上进行了封装,并提供了更高级别、更简洁的API。Seaborn的目标是使用少量的代码创建美观的图表,而不需要繁琐的设置。
默认样式的不同: Matplotlib的默认样式比较简单,需要手动设置才能使图表更加美观。Seaborn 使用了更加现代、美观的默认样式,并提供了多种内置的主题,使得图表的创建更加容易。
统计数据可视化功能: Seaborn的设计初衷是为了可视化统计数据,因此它提供了许多用于可视化统计数据的函数,例如分类散点图、分布图、热力图等。这些函数通常比Matplotlib更高效,更易于使用。
多变量数据可视化功能: Seaborn提供了许多用于可视化多变量数据的函数,例如矩阵图、成对图等。这些函数使得分析多变量数据更加容易。
总的来说,Seaborn具有更高级别、更简洁的API,适用于可视化统计数据和多变量数据。它的默认样式更加美观,使用更加方便。Matplotlib则是一个更加灵活、可定制性更强的绘图库,适用于创建各种类型的图表。大家可以根据自身情况选择合适的绘图库,接下来在开始讲解如何使用本次的Seaborn绘制图表之前,需要安装和导入绘图的接口,代码如下:
pip install seaborn -i https://pypi.mirrors.ustc.edu.cn/simple
目录
绘制单变量分布
绘制双变量分布
分类数据绘图
当处理一组数据时,通常先要做的就是了解变量是如何分布的。
1)对于单变量的数据来说采用直方图或核密度曲线是个不错的选择
2)对于双变量来说,可采用多面板图形展现,比如散点图、二维直方图、核密度估计图形等
针对这种情况,Seaborn库提供了对单变量和双变量分布的绘制函数,如histplot函数、displot函数,下面来介绍这些函数的使用,具体内容如下:
绘制单变量分布
可以采用最简单的直方图描述单变量的分布情况。Seaborn中提供了histplot和displot函数,它默认绘制的是一个带有核密度估计曲线的直方图。distplotO函数的语法格式如下。
# a: 表示要观察的数据,可以是Seies、一维数组或列表。
# bins:用于控制条形的数量。
# kde:接收布尔类型,表示是否绘制高斯核密度估计曲线。
# mg: 接收布尔类型,表示是否在支持的轴方向上绘制rugplot。
seaborn.displot(a, bins=None, kde=True, rug=False, fit=None, color=None)
呈现的效果如下所示:
绘制双变量分布
两个变量的二元分布可视化也很有用。在Seaborn中最简单的方法是使用jointplot()函数,该函数可以创建一个多面板图形,比如散点图、二维直方图、核密度估计等,以显示两个变量之间的双变量关系及每个变量在单坐标轴上的单变量分布。
jointplot()函数的语法格式如下。
# kind:表示绘制图形的类型。
# stat_fune:用于计算有关关系的统计量并标注图。
# color:表示绘图元素的颜色。
# height:用于设置图的大小(正方形)。
# ratio:表示中心图与侧边图的比例。该参数的值越大,则中心图的占比会越大。
# space:用于设置中心图与侧边图的间隔大小。
seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, ratio=5, space=0.2, dropna=True)
下面以散点图、二维直方图、核密度估计曲线为例,介绍如何使用Seaborn绘制这些图形。
绘制散点图:调用seaborn.jointplot()函数绘制散点图的示例如下。
import seaborn as sns
import numpy as np
import pandas as pd# 创建DataFrame对象
df = pd.DataFrame({ "x": np.random.randn(500), "y": np.random.randn(500) })# 绘制散点图
sns.jointplot(x="x", y="y", data=df, color='r', height=5, ratio=10, space=1)
上述示例中,首先创建了一个DataFrame对象df作为散点图的数据,其中x轴和y轴的数据均为500个随机数,接着调用jointplot()函数绘制一个散点图,散点图x轴的名称为“x",y轴的名称为“y”。运行结果如图所示。
绘制二维直方图:二维直方图类似于“六边形"图,主要是因为它显示了落在六角形区域内的观察值的计数,适用于较大的数据集。当调用jointplot()函数时,只要传入kind="hex",就可以绘制二维直方图,具体示例代码如下。
#绘制二维直方图
sns.jointplot(x="x", y="y", data=df, kind="hex")
运行结果如图所示:
从六边形颜色的深浅,可以观察到数据密集的程度,另外,图形的上方和右侧仍然给出了直方图。注意,在绘制二维直方图时,最好使用白色背景。
绘制核密度估计图形:利用核密度估计同样可以查看二元分布,其用等高线图来表示。当调用jointplot()函数时只要传入ind="kde",就可以绘制核密度估计图形,具体示例代码如下。
sns.jointplot(x="x", y="y", data=df, kind="kde", color='r', height=5, ratio=10, space=1)
上述示例中,绘制了核密度的等高线图,另外,在图形的上方和右侧给出了核密度曲线图。运行结果如图所示。
如果想加上阴影的话可以输入 fill = True 即可,效果如下:
绘制成对双变量分布:要想在数据集中绘制多个成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并且显示Datafram对象中每对变量的关系。另外,pairplot()函数也可以绘制每个变量在对角轴上的单变量分布。
接下来,通过sns.pairplot()函数绘制数据集变量间关系的图形,示例代码如下:
import seaborn as sns
import numpy as np
import pandas as pd# 加载seaborn中的数据集
dataset = sns.load_dataset("iris")
dataset.head()
通过load_dataset()函数加载了seaborn中内置的数据集,根据iris数据集绘制多个双变量分布。
# 绘制多个成对的双变量分布
sns.pairplot(dataset)
最终呈现的效果如下:
分类数据绘图
数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类别型的数据了,比如人的性别、学历、爱好等,这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。
Seaborn针对分类数据提供了专门的可视化函数,这些函数大致可以分为如下三种:
1)类数据散点图:swarmplot()与stripplot()。
2)数据的分布图:boxplot()与violinplot()。
3)类数据的统计估算图:barplot()与pointplot()。
下面将针对分类数据可绘制的图形进行简单介绍,具体内容如下:
类别散点图:通过stripplot()函数可以画一个散点图,stripplot()函数的语法格式如下。
# x, y, hue:用于绘制长格式数据的输入。
# data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。
# jitter:表示抖动的程度(仅沿类别轴)。当很多数据点重叠时,可以指定抖动的数量或者设为Tue使用默认值。
seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, jitter=False)
接下来,通过stripplot()
import seaborn as sns
import numpy as np
import pandas as pd# 获取tips数据
data = sns.load_dataset("tips")
sns.stripplot(x="day", y="total_bill", data=data, hue="time")
运行结果如下:
如果想让数据进行重叠可以采用如下的方式:
除此之外,还可调用swarmplot()函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况,示例代码如下。
sns.swarmplot(x="day", y="total_bill", data=data)
类别内的数据分布:要想查看各个分类中的数据分布,显而易见,散点图是不满足需求的,原因是它不够直观。针对这种情况,我们可以绘制如下两种图形进行查看:
以下是绘制箱形图的相关概念:
seaborn中用于绘制箱形图的函数为boxplot(),其语法格式如下:
# palette:用于设置不同级别色相的颜色变量。---palette=["r","g","b","y"]
# saturation:用于设置数据显示的颜色饱和度。----使用小数表示
seaborn.boxplot(x=None, y=None, hue=None, data=None, orient=None, color=None, saturation=0.75, width=0.8)
具体代码如下:
import seaborn as sns
import numpy as np
import pandas as pd# 获取数据
data = sns.load_dataset("tips")# 绘制箱形图
sns.boxplot(x="day", y="total_bill", data=data, hue="time", palette=["g", "r"], saturation=0.5)
最终呈现的效果如下所示:
以下是绘制小提琴图的相关概念:
seaborn中用于绘制小提琴图的函数为violinplot(),其语法格式如下:
seaborn.violinplot(x=None, y=None, hue=None, data=None)
最终呈现的效果如下所示:
类别内的统计估计:要想查看每个分类的集中趋势,则可以使用条形图和点图进行展示。Seaborn库中用于绘制这两种图表的具体函数如下:
1)barplot()函数:绘制条形图。
2)pointplot()函数:绘制点图。
使用barplot函数示例如下:
使用pointplot函数示例如下: