Seaborn 是一个用 Python 制作统计图形的库。 它建立在 matplotlib 之上,并与 pandas 数据结构紧密集成。Seaborn 可帮助您探索和理解您的数据。 它的绘图功能对包含整个数据集的数据框和数组进行操作,并在内部执行必要的语义映射和统计聚合以生成信息图。 其面向数据集的声明式 API 让您可以专注于绘图的不同元素的含义,而不是关注如何绘制它们的细节。请看以下示例:
下面我们逐句解释:
seaborn是本例中需要导入的库,为了方便将其缩写为sns。在后台,seaborn使用matplotlib来绘图。需要在绘图结束之后调用matplotlib.pyplot.show()来显示图片。
这使用了 matplotlib rcParam 系统,并且会影响所有 matplotlib 绘图的外观,即使您不使用 seaborn 制作它们。 除了默认主题之外,还有其他几个选项,您可以独立控制绘图的样式和缩放比例,以便在演示上下文之间快速转换您的工作(例如,制作一个在演讲期间投影时具有可读字体的图形版本 )。 如果你喜欢 matplotlib 默认值或喜欢不同的主题,你可以跳过这一步,仍然使用 seaborn 绘图功能。
文档中的大多数代码将使用 load_dataset() 函数来快速访问示例数据集。 这些数据集没有什么特别之处:它们只是 pandas 数据帧,我们可以使用 pandas.read_csv() 加载它们或手动构建它们。 文档中的大多数示例都将使用 pandas 数据框指定数据,但 seaborn 对它接受的数据结构非常灵活。
该图使用对 seaborn 函数 relplot() 的一次调用显示了tips 数据集中五个变量之间的关系。 请注意我们如何仅提供变量的名称及其在图中的角色。 与直接使用 matplotlib 不同,没有必要根据颜色值或标记代码指定绘图元素的属性。 在幕后,seaborn 处理了从数据框中的值到 matplotlib 理解的参数的转换。 这种声明性方法让您可以专注于您想要回答的问题,而不是关注如何控制 matplotlib 的细节。
1 用于统计图形的高级 API
没有通用的最佳数据可视化方法。 不同的问题最好用不同的情节来回答。 Seaborn 通过使用一致的面向数据集的 API 可以轻松地在不同的视觉表示之间切换。函数 relplot() 之所以这样命名,是因为它旨在可视化许多不同的统计关系。 虽然散点图通常很有效,但一个变量代表时间度量的关系最好用一条线表示。 relplot() 函数有一个方便的 kind 参数,可让您轻松切换到此替代表示:
请注意散点图和折线图中如何使用大小和样式参数,但它们对两种可视化的影响不同:更改散点图中的标记区域和符号与线宽和折线图中的虚线。 我们不需要记住这些细节,让我们专注于情节的整体结构和我们希望它传达的信息。
2 统计估计
通常,我们对作为其他变量函数的一个变量的平均值感兴趣。 许多 seaborn 函数将自动执行回答这些问题所必需的统计估计:
当估计统计值时,seaborn 将使用自举来计算置信区间并绘制表示估计不确定性的误差线。seaborn 中的统计估计超出了描述性统计。 例如,可以通过使用 lmplot() 包含线性回归模型(及其不确定性)来增强散点图:
3 分布表示
统计分析需要有关数据集中变量分布的知识。 seaborn 函数 displot() 支持多种可视化分布的方法。 其中包括直方图等经典技术和核密度估计等计算密集型方法:
Seaborn 还尝试推广功能强大但不太熟悉的技术,例如计算和绘制数据的经验累积分布函数:
4 分类数据图
seaborn 中的几种特殊绘图类型面向可视化分类数据。 它们可以通过 catplot() 访问。 这些图提供了不同级别的粒度。 在最好的水平上,您可能希望通过绘制一个“群”图来查看每个观察结果:一个散点图,它调整了点在分类轴上的位置,使它们不重叠:
或者,您可以使用核密度估计来表示从中采样点的基础分布:
或者您可以仅显示每个嵌套类别中的平均值及其置信区间:
5 复杂数据集的多元视图
有些seaborn函数可以将多个图组合在一起,以便快速展现数据集的摘要信息。其中之一就是jointplot(),它关注单一关系,能够绘制了两个变量之间的联合分布以及每个变量的边际分布:
另外,还有函数pairplot(),能够展现更开阔的视角。它能够展示所有两两组合的变量间的联合分布以及边际分布,如下所示:
6 与 matplotlib 的关系
Seaborn 与 matplotlib 的集成允许您在 matplotlib 支持的许多环境中使用它,包括笔记本中的探索性分析、GUI 应用程序中的实时交互以及多种光栅和矢量格式的存档输出。
虽然你可以只使用 seaborn 函数来提高工作效率,但完全自定义你的图形需要一些 matplotlib 的概念和 API 知识。 对于 seaborn 的新用户来说,学习曲线的一个方面是知道什么时候需要下拉到 matplotlib 层才能实现特定的定制。 另一方面,来自 matplotlib 的用户会发现他们的大部分知识转移。
Matplotlib 拥有全面而强大的 API; 几乎可以根据自己的喜好更改图形的任何属性。 seaborn 的高级界面和 matplotlib 的深度可定制性相结合,将允许您快速浏览数据并创建可定制为出版质量最终产品的图形。