v0.11.0 (2020年9月)#

这是一个重大版本,包含几个重要的新功能、现有功能的增强以及库的更改。亮点包括对分布图绘制功能的全面改造和现代化、更灵活的数据指定、新的色图以及更好的叙述性文档。

有关新功能概述和更新指南,请参阅 这篇Medium文章

必需的关键字参数#

API

大多数绘图函数现在要求所有参数都使用关键字参数指定。为了便于适应,没有使用关键字参数的代码将在v0.11中触发``FutureWarning``。在未来的版本(v0.12或v0.13,取决于发布节奏)中,这将变为一个错误。一旦完全强制使用关键字参数,绘图函数的签名将被重新组织,以接受``data``作为第一个也是唯一的位置参数(#2052, #2081)。

分布函数现代化#

分发模块已经彻底重构,现代化了API并引入了现有函数中的几个新功能和特性。这里解释了一些新功能;教程文档 也已重写,并作为了解这些功能的一个很好的介绍。

新的绘图函数#

|功能| |增强|

首先,新增了三个函数:displot()histplot()ecdfplot() (#2157, #2125, #2141)。

图级 displot() 函数是各种分布图的接口(类似于 relplot()catplot())。它可以绘制单变量或双变量直方图、密度曲线、ECDFs 和地毯图在 FacetGrid 上。

轴级别的 histplot() 函数绘制单变量或双变量直方图,具有以下功能:

  • 使用 hue 语义映射多个分布

  • 归一化以显示密度、概率或频率统计

  • 灵活的箱大小参数化,包括离散变量的适当箱

  • 添加一个 KDE 拟合以显示所有分箱统计数据上的平滑分布

  • 对分类变量和日期时间变量的直方图的实验性支持。

轴级别的 ecdfplot() 函数绘制单变量经验累积分布函数,使用类似的接口。

对现有函数的更改#

API |功能| |增强| |默认值|

其次,现有的函数 kdeplot()rugplot() 已经完全重构(#2060, #2104)。

重新设计的功能现在与seaborn的其他部分共享一个通用的API,它们可以通过使用``hue``语义映射第三个变量来显示条件分布,并且在许多其他方面得到了改进。github的pull request (#2104) 有对这些变化及其背后动机的更详细解释。

这是一个必然的API破坏性更改。位置变量的参数名称现在为 xy,旧名称已被弃用。我们努力在使用了弃用API时进行处理并发出警告,但强烈建议仔细检查您的图表。

此外,基于 statsmodels 的 KDE 计算已被移除。由于不同后端对某些参数(特别是 bwclipcut)的实现方式存在一些不一致,这可能导致在使用非默认参数时图表的外观有所不同。支持使用非高斯核的功能,该功能仅在 statsmodels 后端中可用,也已被移除。

其他新功能包括:

  • 表示多重密度的几个选项(使用 multiplecommon_norm 参数)

  • 加权密度估计(使用新的 weights 参数)

  • 更好地控制平滑带宽(使用新的 bw_adjust 参数)

  • 更有意义的表示二元密度的轮廓参数化(使用 threshlevels 参数)

  • 对数空间密度估计(使用新的 log_scale 参数,或在绘图前对数据轴进行缩放)

  • 通过单个函数调用(通过同时分配 xy)生成的“双变量”地毯图

弃用#

API

最后,distplot() 函数现在正式被弃用。其功能已被 displot()histplot() 吸收。我们曾尝试通过在 displot() 中添加功能并处理向后兼容性来逐步过渡 distplot(),但事实证明这太困难了。名称的相似性可能会在过渡期间引起一些混淆,这是令人遗憾的。

数据摄取的标准化和增强#

|功能| |增强| |文档|

处理输入数据的代码已被重构和增强。在v0.11中,这个新代码对关系和分布模块生效;其他模块将在未来的版本中重构以使用它(#2071)。

这些更改对于大多数用例应该是透明的,尽管它们允许一些新功能:

  • 长格式数据的命名变量可以引用 pandas.DataFrame 的命名索引,或者在多索引的情况下引用级别。以前,在使用索引变量之前(例如,在 groupby 操作之后),需要调用 pandas.DataFrame.reset_index()

  • relplot() 现在具有与轴级函数相同的灵活性,可以接受长格式或宽格式的数据,并且在长格式模式下可以接受数据向量(而不是命名变量)。

  • data 参数现在可以是 Python dict 或实现该接口的对象。这是宽表数据的新功能。对于长表数据,它之前已支持但未记录。

  • 宽格式数据对象可以包含多种类型的混合;在绘图之前,非数值类型将被移除。以前,这会导致错误。

  • 对于其他数据错误指定的情况,有更好的错误信息。

有关支持的内容的更多信息,请参阅新用户指南中关于 数据格式 的章节。

其他更改#

文档改进#

主题化#

  • API set() 函数已被重命名为 set_theme() 以更清晰地表明其功能。在可预见的未来,set() 将作为别名保留,但建议更新您的代码。

关系图#

  • |增强| |默认值| 在使用数值色调或尺寸映射时,减少了关系图图例的一些令人惊讶的行为(#2229):

    • 添加了一个“自动”模式(新的默认设置),该模式根据每个变量的唯一级别数量在“简要”和“完整”图例之间进行选择。

    • 修改了“简短”图例的计时算法,使其最多显示6个值,并且不显示超出数据范围的值。

    • 更改了图例标题的处理方式:当只有一个变量被分配了语义映射时,使用正常的 matplotlib 图例标题;而当定义了多个语义变量时,仅使用旧方法,即添加一个带有副标题标签的不可见图例艺术家。

    • 修改了图例副标题,使其左对齐,并以默认的图例标题字体大小绘制。

  • |增强| |默认值| 更改了使用不同表示法处理数值和分类数据的函数如何处理 object 数据类型的向量。以前,如果数据可以在无错误的情况下强制转换为浮点表示法,则被视为数值。现在,只有当对象类型向量的内容本身是数值时,才被视为数值。因此,编码为字符串的数字现在将被视为分类数据 (#2084)。

  • |增强| |默认值| 使用 style 语义的图表现在可以默认生成无限数量的独特虚线和/或标记。以前,如果 style 变量的级别数超过默认列表所能映射的数量,则会引发错误。作为此更改的一部分,现有的默认值略有修改;如果您需要精确重现早期版本的图表,请参考 旧默认值 (#2075)。

  • |默认值| 更改了 散点图() 设置散点边缘默认线宽的方式。新行为是根据点的大小本身进行缩放(基于整个图,而不是单个点)。当点大小不变化时,此更改还会略微减小默认宽度。设置 linewidth=0.75 以重现之前的行为。(#2708)。

  • |增强| 改进了 散点图()折线图() 中对 datetime 变量的支持 (#2138)。

  • |修复| 修复了一个错误,即 lineplot() 没有将 linestyle 参数传递给 matplotlib (#2095)。

  • |修复| 适应了 matplotlib 的一个变化,该变化阻止了在 scatterplot() 中向 cs 传递字面值向量 (#2079)。

分类图#

  • |增强| |默认值| |修复| 修复了 boxenplot() 中的一些计算问题,并改进了其视觉效果 (#2086):

    • 将计算盒子数量的默认方法更改为 k_depth="tukey",因为之前的默认方法(k_depth="proportion")基于一种启发式方法,对于小数据集会产生过多的盒子。

    • 添加了指定特定数量的箱子(例如 k_depth=6)或绘制覆盖大多数数据点的箱子的选项(k_depth="full")。

    • 新增了一个参数 trust_alpha,用于在 k_depth="trustworthy" 时控制盒子的数量。

    • 更改了 boxenplot() 的视觉效果,使其更接近 boxplot() 。值得注意的是,当边缘为白色时,细小的方框将保持可见。

  • |增强| 允许 catplot() 在关闭轴共享时(例如通过指定 sharex=False),在每个分面的分类轴上使用不同的值 (#2196)。

  • |增强| 改进了分类图处理方向参数时产生的错误信息。

  • |增强|swarmplot() 中超过 5% 的点在群集的“沟槽”中重叠时,添加了明确的警告 (#2045)。

多图网格#

  • |功能| |增强| |默认值| 在使用 PairGrid 时,为了使生活更轻松,进行了一些小改动 (#2234):

    • 通过 legend 属性增加了对图例对象的公共访问(同样影响 FacetGrid)。

    • 当不使用 hue 时,colorlabel 参数不再传递给绘图函数。

    • 在边缘轴上绘图之前,数据不再转换为 numpy 对象。

    • 可以仅指定 x_varsy_vars 中的一个,使用所有变量作为未指定维度的值。

    • layout_pad 参数在每次调用 PairGrid.tight_layout() 方法时都会被存储和使用。

  • |功能|FacetGridPairGrid 添加了 tight_layout 方法,该方法在不受到外部图例干扰的情况下运行 matplotlib.pyplot.tight_layout() 算法 (#2073)。

  • |功能|FacetGrid 添加了 axes_dict 属性,以便通过名称访问组件轴 (#2046)。

  • |增强| 使 FacetGrid.set_axis_labels() 从“内部”轴清除标签 (#2046)。

  • |功能|JointGrid 添加了 marginal_ticks 参数,如果设置为 True,将在边缘图的计数/密度轴上显示刻度 (#2210)。

  • |增强| 改进了 FacetGrid.set_titles() 方法,当 margin_titles=True 时,在添加新标题之前会移除代表原始行标题的文本 (#2083)。

  • |默认值|FacetGridPairGridJointGrid 以及相应的函数中,将 dropna 的默认值更改为 False。由于 seaborn 和 matplotlib 的几乎所有绘图函数都能很好地处理缺失数据,这个选项不再有用,但在某些边缘情况下会导致问题。未来可能会被弃用。(#2204)。

  • |修复| 修复了在设置 corner=Truedespine=FalsePairGrid 中出现的错误 (#2203)。

颜色调色板#

  • |文档| 改进了并现代化了 seaborn 教程中的 颜色调色板章节

  • |功能| 添加了两个新的感知均匀的色图:“flare”和“crest”。新的色图类似于“rocket”和“mako”,但它们的亮度范围有所减少。这使得它们非常适合于需要与轴背景在极端处形成对比的线图或散点图的数值映射 (#2237)。

  • |增强| |默认| 以多种方式增强了数字色图功能 (#2237):

    • color_palette() 接口中添加了基于字符串的访问方式,以访问 dark_palette()light_palette()blend_palette()。这意味着在 seaborn 中指定调色板时,类似 "dark:blue" 的名称将使用输入为 "blue"dark_palette()

    • color_palette() 添加了 as_cmap 参数,并修改了使用连续颜色映射的内部代码以采用此路径。

    • 调整了 light_palette()dark_palette() 函数,使其使用一个非常不饱和的输入颜色版本作为终点,而不是纯灰色。这产生了更平滑的渐变。要完全重现之前的图表,请使用 blend_palette() 并分别使用 ".13" 表示深色或 ".95" 表示浅色。

    • 更改了 diverging_palette() 使其默认值为 sep=1,这会得到更好的结果。

  • |增强|color_palette() 返回的对象添加了丰富的 HTML 表示 (#2225)。

  • |修复| 修复了 "{palette}_d" 逻辑,以修改反向色图并在两种情况下使用正确的亮度渐变方向。

弃用和移除#

  • |增强|get_dataset_names() 中移除了对 BeautifulSoup (#2190) 的可选(且未记录)依赖。

  • API 弃用了 axlabel 函数;请改用 ax.set(xlabel=, ylabel=)

  • API 已弃用 iqr 函数;请改用 scipy.stats.iqr()

  • API 最终移除先前已弃用的 JointGrid 上的 annotate 方法,以及相关参数。

  • API 最终移除 lvplot 函数(之前已被弃用的 boxenplot() 的名称)。