备注:该文件的翻译内容还没有进行仔细的检测

该文档内容来源于seaborn官网An introduction to seaborn

seaborn简介 - An introduction to seaborn

Seaborn是一个用Python制作统计图形的库。它在matplotlib的基础上进行构建,并与panda数据结构紧密集成。
Seaborn可以帮助你探索和理解你的数据。它的绘图功能包含了对整个数据集的数据帧和数组的操作,并可以执行语义映射和统计聚合,生成信息图。它面向数据集的、声明性的API使你能够关注绘图的不同元素的意义,而不是如何绘制它们的细节。

以下是seaborn可以做什么的示例:

# Import seaborn
import seaborn as sns

# Apply the default theme - 设置主题
sns.set_theme()

# Load an example dataset
tips = sns.load_dataset("tips")

# Create a visualization
sns.relplot(
data=tips,
x="total_bill", y="tip", col="time",
hue="smoker", style="smoker", size="size",
)

这里发生了一些事情。让我们逐一了解一下:

# Import seaborn
import seaborn as sns

Seaborn是这个简单示例中唯一需要导入的库。按照惯例,用缩写sns导入。
在幕后,seaborn使用matplotlib绘制其情节。对于交互式工作,建议在matplotlib模式下使用Jupyter/IPython接口,否则当您想查看绘图时,必须调用matplotlib.pyplot.show()

# Apply the default theme
sns.set_theme()

这将使用matplotlib rcParam系统,并将影响所有matplotllib绘图的外观,即使您没有使用seaborn进行绘制。除了默认主题之外,还有其他几个选项,您可以独立控制绘图的风格和缩放比例,以便在演示上下文之间快速转换您的作品(例如,制作一个在演讲中投影时具有可读字体的图形版本)。如果您喜欢matplotlib默认设置或喜欢不同的主题,可以跳过此步骤,仍然使用seaborn打印功能。

# Load an example dataset
tips = sns.load_dataset("tips")

文档中的大多数代码将使用load_dataset()函数来快速访问示例数据集。这些数据集没有什么特别之处:它们只是pandas数据帧,我们可以用pandas.read_csv()加载它们,也可以手工构建它们。文档中的大多数示例都会使用pandas数据帧指定数据,但seaborn在接受的数据结构方面非常灵活。

# Create a visualization
sns.relplot(
data=tips,
x="total_bill", y="tip", col="time",
hue="smoker", style="smoker", size="size",
)

该图显示了tips数据集中五个变量之间的关系,使用对seaborn函数relplot()的单个调用。请注意,我们如何仅提供变量的名称及其在绘图中的角色。和直接使用matplotlib不同,它不需要根据颜色值或标记代码指定绘图元素的属性。在幕后,seaborn处理了从数据帧中的值到matplotlib理解的参数的转换。这种声明性方法可以让您专注于想要回答的问题,而不是如何控制matplotlib的细节。

用于统计绘图的高级API - A high-level API for statistical graphics

没有一种通用的最佳方式来可视化数据。不同的问题最好用不同的情节来回答。Seaborn通过使用一致的面向数据集的API,可以轻松地在不同的视觉表示之间切换。

函数relplot()是这样命名的,因为它被设计为可视化许多不同的统计关系。虽然散点图通常是有效的,但一个变量代表时间度量的关系最好用一条线来表示。relplot()函数有一个方便的类型参数kind,可以让您轻松切换到这种替代表示:

dots = sns.load_dataset("dots")
sns.relplot(
data=dots, kind="line",
x="time", y="firing_rate", col="align",
hue="choice", size="coherence", style="choice",
facet_kws=dict(sharex=False),
)

请注意sizestyle参数是如何在散点图和折线图中使用的,但它们对两种可视化效果的影响不同:更改散点图中的标记区域和符号与折线图中的线宽和虚线。我们不需要记住这些细节,让我们专注于情节的整体结构和我们希望它传达的信息。

统计估计

通常,我们对一个变量的平均值作为其他变量的函数感兴趣。许多seaborn函数将自动执行回答以下问题所需的统计估计:

fmri = sns.load_dataset("fmri")
sns.relplot(
data=fmri, kind="line",
x="timepoint", y="signal", col="region",
hue="event", style="event",
)

当估计统计值时,seaborn将使用自举来计算置信区间,并绘制表示估计不确定性的误差条。

seaborn的统计估计超越了描述性统计。例如,可以通过使用 lmplot()包含线性回归模型(及其不确定性)来增强散点图:

sns.lmplot(data=tips, x="total_bill", y="tip", col="time", hue="smoker")

分布表示

统计分析需要了解数据集中变量的分布情况。seaborn函数displot()支持几种可视化分布的方法。其中包括直方图等经典技术和核密度估计等计算密集型方法:

sns.displot(data=tips, x="total_bill", col="time", kde=True)

Seaborn还试图推广强大但不太熟悉的技术,例如计算和绘制数据的经验累积分布函数:

sns.displot(data=tips, kind="ecdf", x="total_bill", col="time", hue="smoker", rug=True)

分类数据图

seaborn中的几个专门的图类型面向可视化分类数据。它们可以通过catplot()访问。这些图提供了不同级别的粒度。在最好的层面上,你可能希望通过绘制“swarm”(群)图来观察每一个观察结果:一种散点图,它沿着分类轴调整点的位置,使它们不重叠:

sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")

或者,可以使用内核密度估计来表示采样点的基本分布:

sns.catplot(data=tips, kind="violin", x="day", y="total_bill", hue="smoker", split=True)

或者,您可以只显示每个嵌套类别中的平均值及其置信区间:

sns.catplot(data=tips, kind="bar", x="day", y="total_bill", hue="smoker")

复杂数据集上的多变量视图

一些seaborn函数结合了多种绘图,可以快速给出数据集的信息摘要。一个是jointplot(),它关注的是单个关系。它绘制了两个变量之间的联合分布以及每个变量的边际分布:

penguins = sns.load_dataset("penguins")
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species")

另一个是pairplot(),它从更广泛的角度来看:它分别显示了所有成对关系和每个变量的联合分布和边际分布:

sns.pairplot(data=penguins, hue="species")

用于构建绘图的较低级别工具

这些工具的工作原理是将轴级绘图功能与管理图形布局的对象相结合,将数据集的结构链接到轴网格。这两个元素都是公共API的一部分,您可以直接使用它们来创建复杂的图形,只需多写几行代码:

g = sns.PairGrid(penguins, hue="species", corner=True)
g.map_lower(sns.kdeplot, hue=None, levels=5, color=".2")
g.map_lower(sns.scatterplot, marker="+")
g.map_diag(sns.histplot, element="step", linewidth=0, kde=True)
g.add_legend(frameon=True)
g.legend.set_bbox_to_anchor((.61, .6))

主观的默认设置和灵活的自定义功能

Seaborn通过一个函数调用创建完整的图形:在可能的情况下,其函数将自动添加信息轴标签和图例,解释绘图中的语义映射。
在许多情况下,seaborn还会根据数据的特征为其参数选择默认值。例如,到目前为止,我们看到的color mappings颜色映射使用不同的色调(蓝色、橙色,有时是绿色)来表示分配给色调的分类变量的不同级别。映射数值变量时,某些函数将切换到连续渐变:

sns.relplot(
data=penguins,
x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g"
)

当你准备分享或发布你的作品时,你可能会想把这个数字打磨到默认值之外。Seaborn允许多种级别的定制。它定义了适用于所有图形的多个内置主题,其函数具有可以修改每个绘图的语义映射的标准化参数,并且将额外的关键字参数传递给底层的matplotlib艺术家,从而允许更多的控制。创建绘图后,可以通过seaborn API和matplotlib层修改其属性,以进行细粒度调整:

sns.set_theme(style="ticks", font_scale=1.25)
g = sns.relplot(
data=penguins,
x="bill_length_mm", y="bill_depth_mm", hue="body_mass_g",
palette="crest", marker="x", s=100,
)
g.set_axis_labels("Bill length (mm)", "Bill depth (mm)", labelpad=10)
g.legend.set_title("Body mass (g)")
g.figure.set_size_inches(6.5, 4.5)
g.ax.margins(.15)
g.despine(trim=True)

与matplotlib的关系

Seaborn与matplotlib的集成使您能够在matplotllib支持的许多环境中使用它,包括笔记本电脑中的探索性分析、GUI应用程序中的实时交互,以及多种光栅和矢量格式的存档输出。
虽然只使用seaborn函数可以提高效率,但图形的完全自定义需要了解matplotlib的概念和API。seaborn新用户的学习曲线的一个方面是知道何时需要降到matplotlib层来实现特定的定制。另一方面,来自matplotlib的用户会发现他们的大部分知识都在转移。
Matplotlib具有全面而强大的API;图形的任何属性都可以根据您的喜好进行更改。seaborn的高级界面和matplotlib的深度可定制性相结合,将使您既能快速浏览数据,又能创建可定制为出版物质量最终产品的图形。

下一步 - Next steps

下一步你有几个选择。您可能首先想了解如何安装seaborn。完成后,您可以浏览示例库example gallery,以更广泛地了解seaborn可以制作什么样的图形。或者,您可以阅读用户指南和教程user guide and tutorial的其余部分,以深入讨论不同的工具以及它们的设计目的。如果你有一个特定的绘图,并且想知道如何制作它,你可以查看API参考API reference,它记录了每个函数的参数,并显示了许多示例来说明用法。