前言
机器学习涉及到大量的数据,如果能将数据直观地展示出来,无疑可以更方便地分析问题。接下来介绍seaborn库,它是基于matplotlib的数据可视化库,提供更高级的接口绘制各种图表。
seanborn读取CSV数据文件,前文《逗号分割值(CSV)文件格式介绍》已经对这种简单的格式进行介绍。接下来的教程中我们将探索很多绘制特性,本篇文章只是对不同的函数进行抽象的总结。
相似的任务相似的函数
seaborn的空间是扁平的,所有的功能都可以通过初始节点进行访问。但是代码是有层级结构的,模块内的函数通过不同的手段达到相似的可视化效果,很多功能都围绕关系(Delational),分布(Distributional),分类(Categorical)三个模块展开。
比如分布模块定义数据的分布情况,下面是柱状图显示
柱状图
上述数据来源于github上mwaskom/seaborn-data项目,它有很多以.csv后缀结尾的文件,绘制的指令
penguins = sns.load_dataset("temp/penguins")sns.histplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")plt.show()相似的还可以用内核密度评估函数进行绘制
sns.kdeplot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")plt.show()在模块内的函数底层有很多是相同的,但是有些特性不会在其它函数上展示,比如multiple='stack',它用来切换不同的视图表示。
密度图
图形(figure-level) VS 坐标(axes-level)函数
除了根据不同的模块划分,seaborn里面的函数还可以划分为坐标和图形两类。上面的示例使用两个坐标函数,绘图数据都在函数的返回值matplotlib.pyplot.Axes对象上。
相反的,图形函数是通过seaborn对象FacetGrid管理图形,每个模块都有一个图形函数,提供各种各样的坐标函数,如下展示
模块
比如分布模块的displot()函数是一个图形函数,它的默认行为是画直方图,底层和histplot()函数是一样的
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")还可以通过kind属性绘制和kdeplot()函数一样的密度图
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack", kind="kde")图形函数的绘制大部分情况下和坐标函数的绘制是相同的,图形函数最大的优势是很容易创建几个子类的绘制。比如可以将上面叠加的分布图绘制在不同的图表中
子类
坐标函数生成自包含图
f, axs = plt.subplots(1, 2, figsize=(8, 4), gridspec_kw=dict(width_ratios=[4, 3]))sns.scatterplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", ax=axs[0])sns.histplot(data=penguins, x="species", hue="species", shrink=.8, alpha=.8, legend=False, ax=axs[1])f.tight_layout()plt.show()坐标函数可以包含额外的图,底层使用的是matplotlib.pyplot.gca()函数,它们的分布是通过"ax="属性实现的,指定每个图的位置
图包含
图形函数生成图
和坐标函数相反的是,图形函数无法和其它的图形进行组合。从设计上来说,只能够创建它们自己的图
tips = sns.load_dataset("tips")g = sns.relplot(data=tips, x="total_bill", y="tip")g.ax.axline(xy1=(10, 2), slope=.2, color="b", dashes=(5, 2))plt.show()分布图上绘制斜线
分布图
设置图形函数的属性
g = sns.relplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", col="sex")g.set_axis_labels("Flipper length (mm)", "Bill length (mm)")上述图形函数返回一个FacetGrid实例,可以通过它对图形的属性进行设置,比如改变横纵坐标的标签
改标签
设置图片的大小
由于seaborn是基于matplotlib库的,对于坐标函数来说,设置图片的大小的方式和matplotlib比较像。但是对于图像函数来说,有几个关键的不同,这里不作过多的介绍,后续在matplotlib介绍中讲解。
图形组合
两个重要的函数jointplot()和pairplot(),可以将图形组合显示。
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")jointplot()函数会在图形组合之间加上一定的空隙
jointplot()函数
pairplot()和jointplot()函数比较类似,它也会组合所有的图形,但是所有的图形是共享坐标系的。
sns.pairplot(data=penguins, hue="species")这些函数在底层都是使用坐标函数scaterplot()和kdeplot()进行展示
pairplot()函数
总结
大致介绍seaborn的主要功能函数,特别是要理解图形函数和坐标函数的区别,可以理解为图形函数提供一个画板,坐标函数相当于一个画布,一个画板中可以有多个画布。
| 留言与评论(共有 0 条评论) “” |