1.5.0 中的 API 变更#

代码更改#

反向 matplotlib.cbook.ls_mapper,添加了 ls_mapper_r#

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

防止在 Axes 之间移动艺术家,将 Artist.axes 属性化,弃用 Artist.{get,set}_axes#

这样做是为了防止已经与一个坐标轴关联的艺术家被移动/添加到不同的坐标轴上。这从未被支持,因为它会对变换栈造成混乱。表面上对这种操作的支持(因为它没有引发异常)是多个错误报告和在SO上提问的来源。

对于几乎所有使用情况,轴向艺术家的分配应由轴作为 Axes.add_* 方法的一部分来处理,因此弃用了 {get,set}_axes。

移除 set_axes 方法也将从 ACCEPTS kwarg 表中移除 'axes' 行(假设移除日期在此之前未被彻底修改)。

加强了对 'pivot' 关键字参数的输入验证#

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

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

重新排序的 Axes.get_children#

通过 axes.Axes.get_children 返回的艺术家顺序与 axes.Axes.draw 使用的顺序不匹配。现在它们使用相同的顺序,因为 axes.Axes.draw 现在调用 axes.Axes.get_children

改变了等高线图的行为#

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

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

此外,关键字参数 nchunk 现在也适用于 contour() 以及 contourf(),它将域细分为恰好 nchunknchunk 个四边形子域,而以前它只是大致 nchunknchunk 个四边形。

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

为所有 Locator 类型添加了 set_params 函数#

这是一个针对使 Locators 的 API 更加一致的错误修复。

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

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

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

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

axes.Axes.plot 中,不允许 xy 参数的输入为 None。这可能会破坏一些用户代码,但这从未正式支持(例如未文档化),并且允许 None 对象通过可能会导致下游出现令人困惑的异常。

要创建一个空行,请使用

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

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

MicrosecondLocator.__call__ 中移除了 argskwargs#

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

MicrosecondLocator 和 YearLocator 没有 ValueError#

当调用 MicrosecondLocatorYearLocator 对象时,如果轴没有数据或视图没有间隔,它们将返回一个空列表。以前,它们会引发一个 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的值。

将圆形标记的快照阈值更改为无穷大#

当绘制大于某个标记尺寸(之前为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 中的间距命令已更改,以更接近 vanilla TeX 的匹配。

改进了mathtext中的间距#

出现在下标和上标之后的额外空格已被移除。

无注释坐标包裹#

在 #2351 中,针对 1.4.0 版本,坐标 ['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"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) 参数所取代。不建议在同一个 rc 文件中同时使用这两个参数,因为结果无法预测。为了兼容性,设置 axes.color_cycle 将用颜色循环替换 rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) 中的循环器。如果存在,访问 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

从艺术家移除了 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 中移除了参数顺序不明确的函数

注解#

从注释对象中移除了 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.颜色#

2005年已弃用,请使用 set_color

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

使用 edgecolor 代替。增加了对 shading 的验证,使其只能接受有效值。

从散点图中移除 faceted 关键字参数#

移除对 faceted 关键字参数的支持。这个参数在 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弃用。