1.5.0 中的 API 变更#

代码变更#

反转了 matplotlib.cbook.ls_mapper,新增了 ls_mapper_r#

以前,matplotlib.cbook.ls_mapper 是一个字典,以长格式的线条样式名称(如 "solid")作为键,以短格式(如 "-")作为值。这种长到短的映射现在由 ls_mapper_r 完成,而短到长的映射则由 ls_mapper 完成。

禁止在 Axes 之间移动 artist,将 Artist.axes 属性化,并废弃 Artist.{get,set}_axes#

此举旨在防止已与某个 Axes 关联的 Artist 被移动/添加到不同的 Axes。这从未得到官方支持,因为它会导致转换堆栈混乱。这种表面上的支持(因为它没有引发异常)是多个错误报告和 Stack Overflow 上问题的原因。

对于几乎所有用例,将 axes 分配给 artist 的操作应由 axes 在 Axes.add_* 方法中处理,因此废弃了 {get,set}_axes。

移除 set_axes 方法还将从 ACCEPTS kwarg 表中移除 'axes' 行(假设在全面改造之前该移除日期到来)。

收紧了 quiver 中 'pivot' kwarg 的输入验证#

收紧了验证,现在只有 {'tip', 'tail', 'mid', 和 'middle'}(但任何大小写形式)是 Quiver 类中 _pivot_ 关键字参数的有效值(因此也适用于 axes.Axes.quiverpyplot.quiver,它们都完全委托给 Quiver)。以前,任何匹配 'mid.*' 的输入都会被解释为 'middle','tip.*' 被解释为 'tip',而任何不匹配这些模式的字符串则被解释为 'tail'。

Quiver.pivot 的值在 Quiver 中被规范化为集合 {'tip', 'tail', 'middle'}。

重新排序了 Axes.get_children#

axes.Axes.get_children 返回的 artist 顺序与 axes.Axes.draw 使用的顺序不匹配。它们现在使用相同的顺序,因为 axes.Axes.draw 现在调用了 axes.Axes.get_children

等高线图的行为已更改#

当使用掩码数组时,contour()contourf() 的默认行为现在由新的关键字参数 _corner_mask_ 决定,如果未指定,则由新的 rcParams["contour.corner_mask"](默认值:True)代替。新的默认行为等同于使用 corner_mask=True;以前的行为可以通过使用 corner_mask=False 或更改 rcParam 来获得。示例 https://matplotlib.org.cn/examples/pylab_examples/contour_corner_mask.html 展示了差异。使用旧的等高线算法(通过 corner_mask='legacy' 获得)现已废弃。

等高线标签现在可能出现在与早期 Matplotlib 版本不同的位置。

此外,关键字参数 _nchunk_ 现在既适用于 contour() 也适用于 contourf(),并且它将域细分为精确的 _nchunk_ x _nchunk_ 四边形子域,而以前它只是大约 _nchunk_ x _nchunk_ 的四边形子域。

执行等高线计算的 C/C++ 对象以前存储在公共属性 QuadContourSet.Cntr 中,但现在存储在私有属性中,不应由最终用户访问。

为所有 Locator 类型新增了 set_params 函数#

这是一个旨在使 Locators 的 API 更一致的错误修复。

在旧的行为中,只有 MaxNLocator 类型的定位器定义了 set_params(),导致在任何其他 Locator 上使用它时会引发 AttributeError(附注:set_params(args) 是一个函数,用于将 Locator 实例的参数设置为 args 中指定的值)。修复方法是将 set_params() 移动到 Locator 类中,以便所有子类型都将定义此函数。

由于每个 Locator 子类型都有自己的可修改参数,因此在 Locator 中实现一个通用的 set_params() 并不理想。相反,Locator 中实现了一个默认的无操作函数,它会引发警告。继承 Locator 的子类型将使用自己的实现进行覆盖。不需要 set_params() 的子类型将回退到其父类的实现,这会按预期引发警告。

在新行为中,调用 set_params() 时 Locator 实例不会引发 AttributeError。对于未实现 set_params() 的 Locators,将使用 Locator 中的默认实现。

禁止在 ax.plot 中使用 None 作为 x 或 y 值#

不允许 None 作为 axes.Axes.plotxy 参数的有效输入。这可能会破坏一些用户代码,但从未得到官方支持(例如文档中未提及),并且允许 None 对象通过可能会导致下游出现令人困惑的异常。

要创建一条空行,请使用

ln1, = ax.plot([], [], ...)
ln2, = ax.plot([], ...)

无论哪种情况,要更新 Line2D 对象中的数据,您必须同时更新 xy 数据。

MicrosecondLocator.__call__ 中移除了 _args_ 和 _kwargs_#

matplotlib.dates.MicrosecondLocator.__call__ 的调用签名已从 __call__(self, *args, **kwargs) 更改为 __call__(self)。这与超类 Locator 以及所有从该超类派生的其他 Locators 保持一致。

MicrosecondLocator 和 YearLocator 不再引发 ValueError#

当调用 MicrosecondLocatorYearLocator 对象时,如果 axes 没有数据或视图没有区间,它们将返回一个空列表。以前,它们会引发 ValueError。这与所有日期定位器保持一致。

'OffsetBox.DrawingArea' 遵守 'clip' 关键字参数#

调用签名是 OffsetBox.DrawingArea(..., clip=True),但 _clip_ 参数没有被处理。无论该参数如何,对象都不会进行任何裁剪。现在,如果子 Artist 被设置为裁剪,对象可以并且确实会裁剪它们。

您可以使用 child.set_clip_on(False) 按每个子对象关闭裁剪。

为 clipPath id 添加“盐值”#

为用于确定 clipPath 节点 ID 的哈希值添加“盐值”。这是为了避免当两个具有相同剪裁路径的 SVG 文档包含在同一个文档中时发生冲突(参见 ipython/ipython#8133matplotlib/matplotlib#4349 ),然而,这意味着如果同一个图表保存两次,SVG 输出将不再是确定性的。预计这不会影响任何用户,因为当前 ID 是从剪裁路径属性的 MD5 哈希值生成的,任何用户都很难预测 ID 的值。

将圆形标记的吸附阈值更改为 inf(无穷大)#

当绘制超出某个标记大小(以前是 6.0)的圆形标记时,用于生成标记的路径会吸附到像素中心。然而,这最终会导致标记偏离圆形而变形。通过将吸附阈值设置为无穷大,圆形上将永不进行吸附。

此更改破坏了一些测试,但这是一个改进。

保留文本位置的单位#

以前,Text 上的 'get_position' 方法会剥离单位信息,即使单位仍然存在。没有内在的需求这样做,因此已进行了更改,以便(如果存在)单位数据将得到保留。本质上,调用 'get_position' 将返回调用 'set_position' 的精确值。

如果您希望获得旧行为,那么可以使用名为 'get_unitless_position' 的新方法。

自定义 Axes 视图变更的新 API#

交互式平移和缩放以前是使用一种笛卡尔坐标系特有的算法实现的,该算法不一定适用于自定义 Axes。三个新的私有方法,matplotlib.axes._base._AxesBase._get_viewmatplotlib.axes._base._AxesBase._set_viewmatplotlib.axes._base._AxesBase._set_view_from_bbox,允许自定义 _Axes_ 类覆盖平移和缩放算法。重写这些方法的自定义 _Axes_ 实现者可以为平移和缩放以及交互式工具栏上的视图导航按钮提供合适的行为。

MathTex 视觉更改#

mathtext 中的间距命令已更改,以更接近于原版 TeX。

mathtext 中的间距改进#

已移除下标和上标之后出现的额外间距。

注释坐标不再换行#

在 1.4.0 版本的 #2351 中,['axes points', 'axes pixel', 'figure points', 'figure pixel'] 作为坐标的行为已更改为负值不再换行。在 1.4.3 中,此更改被撤销,适用于 'axes points' 和 'axes pixel',此外还导致 'axes fraction' 换行。对于 1.5 版本,行为已恢复到 1.4.0-1.4.2 版本时的状态,任何类型的坐标都不再换行。

废弃#

废弃了 GraphicsContextBase.set_graylevel#

GraphicsContextBase.set_graylevel 函数在 1.5 版本中已被废弃,并将在 1.6 版本中移除。它未被使用。可以使用 GraphicsContextBase.set_foreground 代替。

idle_event 已废弃#

idle_event 在大多数后端中损坏或缺失,并在某些情况下导致虚假警告,并且由于动画模块的存在,它在创建动画方面的用途现已过时。因此,除 wx 后端(部分可用)外,所有涉及它的代码都已移除,并且它的使用已被废弃。可以使用 animation 模块来代替创建动画。

color_cycle 已废弃#

鉴于新的属性循环功能,Axes 方法 set_color_cycle 现已废弃。调用此方法将用仅循环给定颜色的属性循环替换当前的属性循环。

类似地,rc 参数 _axes.color_cycle_ 也已被废弃,取而代之的是新的 rcParams["axes.prop_cycle"](默认值:cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))参数。不建议在同一个 rc 文件中同时设置这两个参数,因为结果无法预测。为了兼容性,设置 _axes.color_cycle_ 将用颜色循环替换 rcParams["axes.prop_cycle"](默认值:cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))中的 cycler。访问 _axes.color_cycle_ 将只返回属性循环中的颜色部分(如果存在)。

移除时间表尚未确定。

捆绑的 jQuery#

webagg 后端捆绑的 jQuery 版本已从 1.7.1 升级到 1.11.3。如果您正在使用 webagg 捆绑的 jQuery 版本,则需要相应地更新您的 HTML 文件

-    <script src="_static/jquery/js/jquery-1.7.1.min.js"></script>
+    <script src="_static/jquery/js/jquery-1.11.3.min.js"></script>

已移除的代码#

从主命名空间移除了 Image#

Image 从 PIL/pillow 导入,用于测试 PIL 是否可用,但一旦确定了可用性,就没有理由将 Image 保留在命名空间中。

从 Artist 中移除了 lod#

移除了方法 set_lod 以及对属性 _lod 的所有引用,因为它们在代码库的其他任何地方都未使用。它似乎是一个从未开发完整的功能存根。

从 sample_data 中移除了 _Lena_ 图像#

lena.pnglena.jpg 图像已从 Matplotlib 的 sample_data 目录中移除。这些图像也不再通过 matplotlib.cbook.get_sample_data 提供。我们建议改用 matplotlib.cbook.get_sample_data('grace_hopper.png')matplotlib.cbook.get_sample_data('grace_hopper.jpg')

图例#

移除了将 _loc_ 作为 Legend 位置参数的处理

图例处理器#

移除了允许图例处理器可调用的代码。它们现在必须实现 legend_artist 方法。

坐标轴#

移除了方法 set_scale。这现在通过一个私有方法处理,用户不应直接使用。它通过 Axes.set_{x,y}scale 调用,该方法负责确保相关的更改也作用于 Axes 对象。

finance.py#

从 finance.py 中移除了参数顺序模糊的函数

注释#

从 Annotation 对象中移除了 textcoordsxytext 属性。

sphinxext.ipython_*.py#

ipython_console_highlightingipython_directive 都已移至 IPython。

将您的导入从 matplotlib.sphinxext.ipython_directive 更改为 IPython.sphinxext.ipython_directive,并将 matplotlib.sphinxext.ipython_directive 更改为 IPython.sphinxext.ipython_directive

LineCollection.color#

2005 年废弃,请使用 set_color

移除 'faceted' 作为 tri.tripcolor 中 _shading_ 的有效值#

请改用 _edgecolor_。对 _shading_ 添加了验证,使其只接受有效值。

从 scatter 中移除 faceted kwarg#

移除对 faceted kwarg 的支持。这在 d48b34288e9651ff95c3b8a071ef5ac5cf50bae7 (2008-04-18!) 中被废弃,并由 edgecolor 取代。

ScalarMappable 中移除 set_colorbar 方法#

移除 set_colorbar 方法,直接使用 colorbar 属性。

patheffects.svg#

  • AbstractPathEffect 类中移除 get_proxy_renderer 方法

  • SimplePatchShadow 中移除 patch_alphaoffset_xy

移除 testing.image_util.py#

仅包含不再使用的 PIL 功能移植

移除 mlab.FIFOBuffer#

内部未使用,且不属于 mpl 的核心任务。

移除 mlab.prepca#

2009 年废弃。

移除 NavigationToolbar2QTAgg#

未在基础 NavigationToolbar2Qt 之上添加任何功能

mpl.py#

移除模块 matplotlib.mpl。在 1.3 版本中通过 PR #1670 和提交 78ce67d161625833cacff23cfe5d74920248c5b2 废弃。