v0.12.0 (2022年9月)#
对象接口的介绍#
此版本首次推出了 seaborn.objects 接口,这是一种全新的使用 seaborn 制作图表的方法。这是经过几年的设计和16个月的实现工作的成果。该接口旨在为制作统计图形提供一个更声明性、可组合和可扩展的API。它受到 Wilkinson 的图形语法的启发,提供了一个受 ggplot2 和 vega-lite 等库设计影响的 Pythonic API,并结合了过去10年 seaborn 开发中的经验教训。
这个初始版本应被视为“实验性”的。虽然它足够稳定,可以用于严肃的使用,但肯定有一些粗糙的地方,一些关键功能仍有待实现。在接下来的几个小版本中,可能会发生破坏性的变化。请对遇到的任何限制保持耐心,并在发现令人惊讶的行为时通过报告问题来帮助开发。
仅限关键字参数#
API
Seaborn 的绘图函数现在要求大多数参数使用显式关键字,这是在 v0.11.0 版本中弃用位置参数后的结果。随着这一要求的实施,大多数函数也重新排列了它们的参数列表,使得 data 成为第一个也是唯一的位置参数。这增加了库中各种函数之间的一致性。这也意味着调用 func(data) 将对几乎所有函数(支持宽格式数据的函数)执行某些操作,并且 pandas.DataFrame 可以直接传入绘图函数。未来版本中可能会稍微放宽签名,使得 x 和 y 可以是位置参数,但在此更改后对位置参数的最小支持将减少无意中错误指定的可能性 (#2804)。
分类散点图的现代化#
此版本开始现代化 分类图 的过程,首先从 stripplot() 和 swarmplot() 开始。这些函数进行了一些增强,缓解了一些长期存在的问题 (#2413, #2447):
|功能| 新的
native_scale参数允许数值或日期时间类别以其原始比例绘制,而不是转换为字符串并在固定间隔上绘制。|功能| 新的
formatter参数允许对分类轴上值的字符串表示进行更多控制。对于某些类型,如日期,还应改进默认设置。|增强| 现在可以在仅使用一个坐标变量(即仅
x或y)时分配hue。|增强| 现在可以禁用图例。
更新还与最近引入的函数的行为保持一致。这应该相对不会造成太大影响,尽管一些默认设置将会改变:
|默认值| 这些函数现在钩入 matplotlib 的单位系统以绘制分类数据。(Seaborn 的分类函数实际上早于 matplotlib 对分类数据的支持。)这对用户来说应该大多是透明的,但它可能会解决一些边缘情况。例如,matplotlib 的交互性应该会更好(例如,显示光标下的数据值)。
|默认值| 默认情况下,不再将调色板应用于分类变量的级别。现在需要显式分配
hue才能看到多种颜色(即,将同一变量分配给x/y和hue)。在没有hue的情况下传递palette将继续在一个发布周期内得到支持。|默认值| 数值型
hue变量现在默认接收连续映射,使用与scatterplot()相同的规则。传递palette="deep"以重现之前的默认值。|默认值| 现在绘图遵循默认的属性循环;即,在相同的活跃轴上调用多次轴级函数将生成不同颜色的艺术家。
API 目前,先分配
hue然后再传递一个color将生成一个渐变色板。这已被弃用,因为可以通过例如palette="light:blue"轻松请求渐变。
类似的增强/更新预计将在未来的版本中推广到其他分类绘图函数。此外,还有几个特定于函数的增强:
|增强| 在
stripplot()中,只有一个观察值的“条带”将不带抖动地绘制(#2413)|增强| 在
swarmplot()中,点现在在绘制时进行群集,这意味着图表将适应轴缩放的进一步变化或图表布局的调整 (#2443)。|功能| 在
swarmplot()中,可以通过warn_thresh参数控制发出警告前必须重叠的点的比例 (#2447)。|修复| 在
swarmplot()中,每个群组中的点的顺序现在与原始数据集中的顺序一致;之前它们是排序的。这仅影响存储在 matplotlib 艺术家中的底层数据,不影响视觉表示 (#2443)。
更灵活的误差线#
API |功能|
增加了 lineplot()、barplot() 和 pointplot() 内部计算的误差条显示的灵活性。
通过新的 errorbar 参数,现在可以选择 bootstrap 置信区间、百分位数/预测区间,或由缩放的标准差或标准误差形成的区间。该参数还接受一个从向量映射到区间的任意函数。有一个新的 用户指南章节 演示了这些选项,并解释了何时可能需要使用每个选项。
由于这一更改,ci 参数已被弃用。请注意,regplot() 保留了之前的 API,但可能会在未来的版本中更新(#2407, #2866)。
其他更新#
|功能| 现在可以使用
orient="y"沿 y 轴聚合/排序lineplot()(#2854)。|功能| 通过添加
apply/pipe方法,使自定义FacetGrid/PairGrid/JointGrid变得更加容易,采用流畅(方法链式)风格。此外,修复了tight_layout和refline方法,使其返回self(#2926)。|功能| 添加了
FacetGrid.tick_params()和PairGrid.tick_params()以自定义所有子图的刻度、刻度标签和网格线的外观 (#2944)。|增强| 现在可以在
barplot()和pointplot()中将estimator指定为字符串,而不仅仅是可调用对象 (#2866)。|增强| 当使用
pairplot()并设置corner=True和diag_kind=None时,左上角的 y 轴标签不再被隐藏 (#2850)。|增强| 现在可以将离散的
histplot()绘制为阶梯函数或多边形 (#2859)。|增强| 现在可以通过
box_kws/line_kws/flier_kws自定义boxenplot()中元素的外观 (#2909)。|修复| 修复了0.11.2中的一个回归问题,该问题导致某些函数在输入数据具有重复索引时无限期停滞或引发异常 (#2776)。
|修复| 修复了
histplot()和kdeplot()中的一个错误,该错误导致权重未被纳入归一化处理 (#2812)。|修复| 当仅提供
binwidth时,修复了histplot()中的两个边缘情况 (#2813)。|修复| 修复了
violinplot()中的一个错误,其中在未配对的分割小提琴图中,内部方框/点可能会缺失 (#2814)。|修复| 修复了
scatterplot()中的一个错误,当hue_order是色调级别的一个子集时会引发错误 (#2848)。|修复| 修复了
histplot()中的一个错误,该错误导致在日志刻度上躲避条的宽度不同 (#2849)。|修复| 在
lineplot()中,允许dashes关键字设置线条样式而不映射style变量 (#2449)。|修复| 在
relplot()中改进了对“宽”数据的支持,以及对作为非 pandas 对象传递的分面变量的支持 (#2846)。|修复| 在调用
FacetGrid.map()或FacetGrid.map_dataframe()时,子图标题将不再被重置 (#2705)。|修复| 为 matplotlib 问题添加了一个解决方法,该问题导致在调用
plt.show时图级别函数冻结(#2925)。|默认值|
patch.facecolorrc 参数不再由set_palette()(或set_theme()) 设置。这应该没有一般影响,因为 matplotlib 的默认值现在是"C0"(#2906)。|构建| 将
scipy设为可选依赖,并添加了pip install seaborn[stats]作为在安装时确保兼容的scipy和statsmodels库可用的一种方法。这对现有代码有一些小的影响,这些影响在 Github 拉取请求 (#2398) 中有解释。|构建| 示例数据集现在存储在特定于操作系统的缓存位置(由
appdirs决定),而不是存储在用户的主目录中。如果需要,用户可以随意删除~/seaborn-data(#2773)。|构建| 单元测试套件不再是源代码或 wheel 分发的一部分。Seaborn 从未有过用于执行测试的运行时 API,因此这不应影响工作流程 (#2833)。
API 移除了之前已弃用的
factorplot以及几个之前已弃用的实用函数(iqr、percentiles、pmf_hist和sort_df)。API 移除了(之前未使用的)传递额外关键字参数给
pointplot()的选项。