Seaborn是一个用Python制作统计图形的库。它建立在matplotlib之上,并与pandas数据结构紧密集成。
以下是seaborn提供的一些功能:
- 面向数据集的API,用于检查多个变量之间的关系
- 专门支持使用分类变量来显示观察结果或汇总统计数据
- 可视化单变量或双变量分布以及在数据子集之间进行比较的选项
- 不同种类因变量的线性回归模型的自动估计和绘图
- 方便地查看复杂数据集的整体结构
- 用于构建多绘图网格的高级抽象,可让您轻松构建复杂的可视化
- 简洁的控制matplotlib图形样式与几个内置主题
- 用于选择调色板的工具,可以忠实地显示数据中的模式
Seaborn旨在使可视化成为探索和理解数据的核心部分。其面向数据集的绘图功能对包含整个数据集的数据框和数组进行操作,并在内部执行必要的语义映射和统计聚合,以生成信息图。
以下是这意味着什么的一个例子:
_images / introduction_1_0.png这里发生了一些事情。让我们逐个介绍它们:
- 我们导入seaborn,这是这个简单例子所必需的唯一库。
在幕后,seaborn使用matplotlib绘制情节。只使用seaborn函数可以完成许多任务,但是进一步的自定义可能需要直接使用matplotlib。这在更详细的解释如下。对于交互式工作,建议在matplotlib模式下使用Jupyter / IPython接口,否则当您想要查看绘图时,您必须调用matplotlib.pyplot.show。
- 我们应用默认的默认seaborn主题,缩放和调色板。
这使用了matplotlib rcParam系统,并且会影响所有matplotlib图的外观,即使你没有用seaborn制作它们。除了默认主题之外,还有其他几个选项,您可以独立控制绘图的样式和缩放,以便在演示文稿上下文之间快速翻译您的工作(例如,制作在演讲期间投影时具有可读字体的情节)。如果你喜欢matplotlib默认或喜欢不同的主题,你可以跳过这一步,仍然使用seaborn绘图功能。
- 我们加载一个示例数据集。
文档中的大多数代码都将使用该load_dataset()
函数快速访问示例数据集。这些数据集没有什么特别之处; 它们只是pandas数据帧,我们可以用pandas.read_csv加载它们或手工构建它们。许多示例使用“提示”数据集,这非常无聊,但对于演示非常有用。提示数据集说明了组织数据集的“整洁”方法。你会得到最出seaborn的,如果你的数据集,这种方式组织,并且在更详细的解释如下。
- 我们绘制了一个带有多个语义变量的分面散点图。
此特定图显示了提示数据集中五个变量之间的关系。三个是数字,两个是绝对的。两个数值变量(total_bill
和tip
)确定轴上每个点的位置,第三个(size
)确定每个点的大小。一个分类变量将数据集拆分为两个不同的轴(面),另一个确定每个点的颜色和形状。
所有这一切都是通过单次调用seaborn函数完成的relplot()
。请注意我们如何仅提供数据集中变量的名称以及我们希望它们在绘图中扮演的角色。与直接使用matplotlib时不同,没有必要将变量转换为可视化的参数(例如,用于每个类别的特定颜色或标记)。那个翻译是由seaborn自动完成的。这使用户可以专注于他们希望情节回答的问题。
跨可视化的API抽象
没有通用的可视化数据的最佳方法。不同的问题最好通过不同类型的可视化来回答。Seaborn试图在不同的可视化表示之间切换,可以使用相同的面向数据集的API进行参数化。
该功能relplot()
以这种方式命名,因为它旨在可视化许多不同的统计关系。虽然散点图是一种非常有效的方法,但是一个变量代表时间度量的关系更好地用线表示。该relplot()
函数有一个方便的kind
参数,可让您轻松切换到此替代表示:
注意如何在散点图和线图上共享size
和style
参数,但它们会不同地影响两个可视化(更改标记区域和符号与线宽和虚线)。我们不需要记住这些细节,让我们专注于情节的整体结构和我们希望它传达的信息。
统计估计和误差棒
通常我们对一个变量的平均值感兴趣,作为其他变量的函数。许多seaborn函数可以自动执行必要的统计估计来回答这些问题:
_images / introduction_13_0.png当估计统计值时,seaborn将使用自举来计算置信区间并绘制表示估计不确定性的误差条。
seaborn中的统计估计超出了描述性统计学。例如,还可以使用以下方法增强散点图以包括线性回归模型(及其不确定性)lmplot()
:
[图片上传中...(image-af56dc-1539877746137-10)]
专业分类图
标准散点图和线图可视化数值变量之间的关系,但许多数据分析涉及分类变量。在seaborn中有几种专门的绘图类型,这些类型已针对可视化此类数据进行了优化。他们可以通过访问catplot()
。类似于relplot()
,它的想法catplot()
是它暴露了一个通用的面向数据集的API,它概括了一个数值变量和一个(或多个)分类变量之间关系的不同表示。
这些表示在其底层数据的表示中提供不同级别的粒度。在最精细的级别,您可能希望通过绘制散点图来查看每个观察,该散点图调整沿分类轴的点的位置,以使它们不重叠:
_images / introduction_17_0.png或者,您可以使用内核密度估计来表示从中采样点的基础分布:
_images / introduction_19_0.png或者,您可以在每个嵌套类别中显示唯一的平均值及其置信区间:
_images / introduction_21_0.png图级和轴级函数
这些工具如何运作?了解seaborn绘图功能之间的主要区别非常重要。到目前为止所示的所有图都是用“图形级”功能制作的。这些针对探索性分析进行了优化,因为它们设置了包含绘图的matplotlib图形,并且可以轻松地跨多个轴展开可视化。他们还处理一些棘手的事情,比如将传奇放在轴外。为了做这些事情,他们使用了seaborn FacetGrid
。
每个不同的图形级别图kind
将特定的“轴级”功能与FacetGrid
对象组合在一起。例如,使用scatterplot()
函数绘制散点图,并使用barplot()
函数绘制条形图。这些函数称为“轴级”,因为它们绘制到单个matplotlib轴上,否则不会影响图的其余部分。
结果是图形级功能需要控制它所处的图形,而轴级功能可以组合成一个更复杂的matplotlib图形,其他轴可能有也可能没有seaborn图:
_images / introduction_23_0.png控制图级功能的大小与其他matplotlib图的工作方式略有不同。不是设置整体图形大小,而是通过每个面的大小来参数化图形级函数。而不是设置每个面的高度和宽度,您可以控制高度和纵横比(宽高比)。这种参数化可以很容易地控制图形的大小,而不用考虑它将具有多少行和列,尽管它可能是一个混乱的来源:
_images / introduction_25_0.png你可以判断一个函数是“图形级”还是“轴级”的方式是它是否需要一个ax=
参数。您还可以通过输出类型区分这两个类:axis-level函数返回matplotlib axes
,而figure-level函数返回FacetGrid
。
可视化数据集结构
在seaborn中还有另外两种图形级函数可用于使用多个图形进行可视化。它们各自面向照亮数据集的结构。一,jointplot()
专注于单一关系:
另一个,pairplot()
采用更广泛的视角,显示所有成对关系和边际分布,可选择以分类变量为条件:
双方jointplot()
并pairplot()
具有可视化表示了几个不同的选项,它们都是建立在了能够更加彻底地定制多情节人物(类顶JointGrid
和PairGrid
,分别)。
自定义绘图外观
绘图功能尝试使用良好的默认美学并添加信息标签,以便它们的输出立即有用。但默认情况只能到目前为止,创建一个完全抛光的自定义绘图将需要额外的步骤。可以进行多个级别的额外定制。
第一种方法是使用其中一个备用seaborn主题来为您的情节提供不同的外观。设置不同的主题或调色板将使其对所有绘图生效:
_images / introduction_31_0.png对于特定于图形的自定义,所有seaborn函数都接受许多可选参数,以便切换到非默认语义映射,例如不同的颜色。(适当使用颜色对于有效的数据可视化至关重要,而seaborn 对定制调色板有广泛的支持)。
最后,在与底层matplotlib函数(如scatterplot()
和plt.scatter
)直接对应的情况下,其他关键字参数将传递给matplotlib层:
在relplot()
其他图形级函数的情况下,这意味着存在一些间接级别,因为relplot()
它将exta关键字参数传递给底层的seaborn轴级函数,该函数将其额外的关键字参数传递给底层的matplotlib函数。因此,可能需要花费一些精力为您需要使用的参数找到正确的文档,但原则上可以进行极高级别的自定义。
图形级函数的一些自定义可以通过传递给它的附加参数来完成FacetGrid
,您可以使用该对象上的方法来控制图形的许多其他属性。要进行更多调整,您可以访问绘制绘图的matplotlib对象,这些对象存储为属性:
因为图级功能面向高效探索,使用它们来管理需要精确调整大小和组织的图形可能比在matplotlib中直接设置图形并使用相应的轴级seaborn函数要花费更多精力。Matplotlib拥有全面而强大的API; 几乎任何图形的属性都可以根据自己的喜好进行更改。希望seaborn的高级界面和matplotlib深度可定制性的结合将使您能够快速浏览数据并创建可定制为出版品质最终产品的图形。
组织数据集
如上所述,当您的数据集具有特定组织时,seaborn将是最强大的。这种格式可以替代地称为“长形式”或“整洁”数据,并由Hadley Wickham在本学术论文中详细描述。规则可以简单说明:
- 每个变量都是一列
- 每次观察都是一排
确定数据是否整洁的有用思路是从想要绘制的图中向后思考。从这个角度来看,“变量”是将在情节中分配角色的东西。查看示例数据集并查看它们的结构可能很有用。例如,“tips”数据集的前五行如下所示:
total_bill | 小费 | 性别 | 抽烟者 | 天 | 时间 | 尺寸 | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | 女 | 没有 | 太阳 | 晚餐 | 2 |
1 | 10.34 | 1.66 | 男 | 没有 | 太阳 | 晚餐 | 3 |
2 | 21.01 | 3.50 | 男 | 没有 | 太阳 | 晚餐 | 3 |
3 | 23.68 | 3.31 | 男 | 没有 | 太阳 | 晚餐 | 2 |
4 | 24.59 | 3.61 | 女 | 没有 | 太阳 | 晚餐 | 4 |
在某些领域,整洁的格式起初可能会感到尴尬。例如,时间序列数据有时与每个时间点一起存储为同一观察单元的一部分并出现在列中。我们上面使用的“fmri”数据集说明了整齐的时间序列数据集如何在不同的行中包含每个时间点:
学科 | 时间点 | 事件 | 区域 | 信号 | |
---|---|---|---|---|---|
0 | S13 | 18 | STIM | 顶叶 | -0.017552 |
1 | S5 | 14 | STIM | 顶叶 | -0.080883 |
2 | S12 | 18 | STIM | 顶叶 | -0.081033 |
3 | S11 | 18 | STIM | 顶叶 | -0.046134 |
4 | S10 | 18 | STIM | 顶叶 | -0.037970 |
许多seaborn函数可以绘制宽格式数据,但只能使用有限的功能。要利用依赖于整齐格式数据的pandas.melt
功能,您可能会发现该功能对于“取消旋转”宽格式数据帧非常有用。更多信息和有用的示例可以在这篇博客文章中找到,其中一位是熊猫开发者。
后续步骤
您可以选择下一步的选择。您可能首先想学习如何安装seaborn。完成后,您可以浏览示例库,以更广泛地了解seaborn可以生成哪种图形。或者您可以阅读官方教程,深入讨论不同的工具以及它们的设计目标。如果您有一个特定的情节并想知道如何制作它,您可以查看API参考,该参考记录每个函数的参数并显示许多示例来说明用法。
网友评论