v0.6.0 (2015年6月)#
这是从 0.5 版本以来的一个重大发布。此次发布的主要目标是统一分类图的 API,这意味着一些较旧的函数中有一些相对较大的 API 变化。有关这些变化的详细信息,请参见下文,这些变化可能会破坏为 seaborn 的旧版本编写的代码。还有一些新函数(stripplot() 和 countplot()),现有函数的众多增强功能,以及错误修复。
此外,文档已为0.6版本进行了全面修订和扩展。现在,每个函数的API文档页面都有多个包含嵌入图表的示例,展示了如何使用各种选项。这些页面应被视为最全面的示例资源,而教程页面现在已精简,并面向更高层次的各项功能概览。
分类图的更改和更新#
在版本0.6中,“分类”图表已经统一为一个通用的API。这一类新函数将展示一个数值变量与一个或两个分类变量之间关系的图表组合在一起。这包括在每个箱子中展示数值变量分布的图表(boxplot()、violinplot() 和 stripplot())以及在每个箱子中应用统计估计的图表(pointplot()、barplot() 和 countplot())。有一个新的 教程章节 介绍了这些函数。
分类函数现在各自接受相同格式的输入数据,并且可以以相同的方式调用。它们可以使用长格式或宽格式数据进行绘图,并且可以垂直或水平绘制。当使用长格式数据时,图形的方向是从输入数据的类型推断出来的。此外,所有函数都原生地接受一个 hue 变量,以添加第二层分类。
通过(在某些情况下是新的)API,这些功能都可以通过 FacetGrid 正确绘制。然而,factorplot 现在也可以创建这些类型图表的分面版本,因此在大多数情况下,直接使用 FacetGrid 将是不必要的。默认情况下,factorplot 绘制点图,但这可以通过 kind 参数控制。
以下是关于在统一这些API的过程中所做更改的详细信息:
对
boxplot()和violinplot()的更改可能是最具破坏性的。这两个函数在它们可以接受的数据类型方面保持了向后兼容性,但语法已经改变,与其他seaborn函数更加相似。这些函数现在通过x和/或y参数调用,这些参数可以是数据向量或传递给新data参数的长格式DataFrame中的变量名称。您仍然可以将宽格式DataFrame或数组传递给data,但它不再是第一个位置参数。有关这些更改及其背后的逻辑的更多信息,请参阅 github pull request (#410)。由于
pointplot()和barplot()现在可以在 y 轴上绘制主要的分类变量,因此x_order参数已重命名为order。为
boxplot()和violinplot()添加了hue参数,这允许通过第三个分类变量对绘图元素进行嵌套分组。对于violinplot(),当hue变量有两个级别时,也可以通过拆分小提琴图来实现这种嵌套(使用split=True)。为了使这一功能可行,已经移除了在数据坐标中指定绘图位置的能力。这些图现在绘制在固定位置,类似于(并且与)barplot()和pointplot()相同。为
boxplot()/violinplot()添加了palette参数。color参数仍然存在,但不再接受 seaborn 调色板名称的双重职责。palette取代了color,以便它可以与FacetGrid一起使用。
随着这些API的变化,绘图功能也进行了以下更改/增强:
默认的类别排序规则已更改。现在,图表不再自动排序类别级别,而是按照它们在输入数据中出现的顺序显示(即,由
Series.unique()给出的顺序)。可以通过order和hue_order参数在绘图时指定顺序。此外,当变量是具有“分类”数据类型的 pandas 对象时,类别顺序会从数据对象中推断出来。这一更改也会影响FacetGrid和PairGrid。为
violinplot()添加了scale和scale_hue参数。这些参数控制小提琴图宽度的缩放方式。默认值为area,这与以前绘制小提琴图的方式不同。使用scale='width'可以获得旧的行为。在
violinplot()中为box类型的内部图使用了不同的样式,除了四分位数外,还显示了须的范围。使用inner='quartile'以获得旧样式。
新的绘图函数#
添加了
stripplot()函数,该函数绘制散点图,其中一个是分类变量。此图的API与boxplot()和violinplot()相同。它既可以单独使用,也可以与这些其他图类型组合使用,以同时显示观察结果和基础分布。添加了
countplot()函数,该函数使用条形图表示法来显示一个或多个分类箱中变量的计数。这取代了以前不使用数值变量调用barplot()的旧方法。
其他添加和更改#
The
corrplot()和底层的symmatplot()函数已被弃用,取而代之的是heatmap(),后者更加灵活和强大。这两个函数在版本0.6中仍然可用,但它们将在未来的版本中被移除。添加了
set_color_codes()函数以及set()和set_palette()的color_codes参数。这将matplotlib中速记颜色代码(即“b”、“g”、“k”等)的解释更改为使用seaborn命名调色板(即“deep”、“muted”等)中的值。这使得在使用seaborn导入的情况下直接使用matplotlib函数时,更容易获得更统一的外观。这可能会对现有图表造成干扰,因此默认情况下不会发生。未来可能会改变这一点。当传递给
color_palette()函数时,不再修剪长度超过6种颜色的调色板。为颜色调色板对象添加了
as_hex方法,以返回十六进制代码列表而不是 RGB 元组。jointplot()现在将额外的关键字参数传递给用于在联合轴上绘制图形的函数。将
heatmap()和clustermap()中的默认linewidths更改为 0,以便正确绘制较大的矩阵。此参数仍然存在,并且可以用于获取热图中每个单元格划线的旧效果(旧的默认linewidths为 0.5)。heatmap()和clustermap()现在会自动使用掩码来处理缺失值,这在此前是根据plt.pcolormesh的默认行为,使用颜色映射的“under”值来显示的。添加了
seaborn.crayons字典和crayon_palette()函数,用于从 Crayola 蜡笔 的 120 盒(!)中定义颜色。为
residplot()添加了line_kws参数,用于在使用时更改低ess线的样式。在
FacetGrid和PairGrid的add_legend方法中添加了开放式的**kwargs,这将在调用Figure或Axes上的图例函数时传递额外的关键字参数。为
FacetGrid添加了gridspec_kws参数,该参数允许控制网格中各个分面的大小,以强调某些图或考虑变量范围的差异。当
as_cmap为 True 时,交互式调色板小部件现在显示连续的颜色条,而不是离散的调色板。对于
pairplot()和PairGrid,默认的 Axes 大小现在略微缩小。为
kdeplot()添加了shade_lowest参数,该参数将最低等高线的透明度设置为0,使得在同一坐标轴上绘制多个二元分布变得更加容易。height参数在rugplot()中现在被解释为轴尺寸的函数,并且对轴上数据尺度的变化保持不变。地毯线默认情况下也稍微变窄了。在
distplot()中添加了一个捕获,当计算默认的箱数时。对于高度偏斜的数据,现在将使用 sqrt(n) 个箱,而之前参考规则会返回“无限”个箱并导致 matplotlib 中的异常。为
distplot()直方图使用的默认箱数添加了一个上限(50)。这将有助于避免在某些类型的数据集上出现令人困惑的错误,这些数据集严重违反了用于获取默认箱数的参考规则的假设。当传递特定数量的箱数时,不会应用此上限。可以传递给
plt.boxplot的各种属性字典现在在 seaborn 重新样式化之后应用,以实现完全的可定制性。为
JointGrid添加了一个savefig方法,默认使用紧密的边界框,以便更容易使用此类保存图形,并将紧密的边界框设置为其他网格对象上savefig方法的默认值。你现在可以将一个整数传递给
heatmap()的xticklabels和yticklabels参数(以及由此扩展的clustermap())。这将使绘图使用从数据推断出的刻度标签,但仅绘制每n个标签,其中n是你传递的数字。这在可视化具有某些合理行或列排序的大型矩阵时会有所帮助。在样式参数中添加了
"figure.facecolor",并将其默认设置为白色。现在,
load_dataset()函数在下载数据集后会在本地缓存它们,并在后续调用中使用本地副本。
错误修复#
修复了
clustermap()中的错误,其中掩码和指定的刻度标签在使用树状图时未被重新组织。修复了
FacetGrid和PairGrid中的一个错误,该错误导致当hue变量的级别出现在hue_order中但不在数据中时,图例标签不正确。修复了在使用
col_wrap时FacetGrid.set_xticklabels()或FacetGrid.set_yticklabels()中的一个错误。修复了
PairGrid中的一个错误,其中hue_order参数被忽略。修复了
despine()中的两个错误,这些错误在尝试修剪具有反转轴或无刻度的图形的脊线时会导致错误。改进了
FacetGrid中margin_titles选项的支持,现在可以与图例一起使用。