API 变更 3.10.0#

行为变更#

选择器部件的 onselect 参数变为可选#

EllipseSelectorLassoSelectorPolygonSelectorRectangleSelectoronselect 参数不再是必需的。

SVG 输出:改进了可复现性#

某些 SVG 格式的图表即使配置了静态的 svg.hashsalt 值,每次渲染也会产生不同的输出

问题在于剪切路径的 ID 生成方案是非确定性的;修复引入了一种可重复的、单调递增的整数 ID 方案作为替代。

只要绘图以确定性顺序添加剪切路径,这将实现可重复(又称可再现、确定性)的 SVG 输出。

ft2font 类现在是最终的#

ft2font 类 ft2font.FT2Fontft2font.FT2Image 现在是最终的,不能再被子类化。

InsetIndicator 艺术家#

indicate_insetindicate_inset_zoom 现在返回 InsetIndicator 的实例。使用此艺术家的 rectangleconnectors 属性来访问以前直接返回的对象。

imshowinterpolation_stage 默认值更改为 'auto'#

imshowinterpolation_stage 参数有了新的默认值 'auto'。对于放大倍数小于三倍或缩小后的图像,图像插值将在 'rgba' 空间中进行。对于放大倍数大于或等于三倍的图像,图像插值将在 'data' 空间中进行。

之前的默认值是 'data',因此缩小后的图像在新默认值下可能会发生细微变化。然而,新默认值也避免了在缩小图像时,色图中锐利边界处的浮点伪影。

通过将 interpolation_stage 参数或 rcParams["image.interpolation_stage"](默认值:'auto')设置为 'data',可以实现先前的行为。

imshow 默认的 interpolation 更改为 'auto'#

imshowinterpolation 参数有了新的默认值 'auto',从 'antialiased' 更改而来,以与 interpolation_stage 保持一致,并且因为插值只在缩小时进行抗锯齿处理。传递 'antialiased' 仍然有效,并且行为与 'auto' 完全相同,但不建议使用。

dark_background 和 fivethirtyeight 样式不再设置 savefig.facecolorsavefig.edgecolor#

使用这些样式时,rcParams["savefig.facecolor"](默认值:'auto')和 rcParams["savefig.edgecolor"](默认值:'auto')现在继承了“auto”的全局默认值,这意味着将使用实际的图表颜色。以前,这些 rcParams 被设置为与 rcParams["figure.facecolor"](默认值:'white')和 rcParams["figure.edgecolor"](默认值:'white')相同的值,即保存的图表即使用户手动覆盖了颜色,也始终使用主题颜色;现在不再是这样了。

此更改对未手动设置图表面和边缘颜色的用户不应产生影响。

在 QuiverKey 中添加 zorder 选项#

zorder 可以用作 QuiverKey 的关键字参数。以前,该参数没有任何效果,因为 zorder 是硬编码的。

子图#

Figure.subfigures 现在按行主序添加,以与 Figure.subplots 保持一致。subfigures 的返回值没有改变,但 fig.subfigs 的顺序改变了。

(子)图的 get_figure 方法#

...将来默认将返回直接父图,该父图可能是子图(SubFigure)。这将使默认行为与其它艺术家的 get_figure 方法保持一致。要控制此行为,请使用新引入的 root 参数。

transforms.AffineDeltaTransform 在坐标轴限制更改时正确更新#

在此更改之前,带有 AffineDeltaTransform 的变换子图无法正确更新。此 PR 确保对子变换的更改能够正确传递。

与 ConciseDateFormatter 关联的偏移字符串现在将在坐标轴反转时反转#

以前,当坐标轴反转时,与 ConciseDateFormatter 关联的偏移字符串不会改变,因此偏移字符串指示的坐标轴方向是错误的。现在,当坐标轴反转时,偏移字符串的方向是正确的。

压缩布局中的 suptitle#

压缩布局现在会自动将 suptitle 定位在坐标轴顶行正上方。要将此标题保持在先前位置,请传入 in_layout=False 或在 suptitle 调用中显式设置 y=0.98

弃用#

绘图函数中的位置参数#

许多绘图函数将来会将位置参数限制在前几个参数。所有进一步的配置参数都必须作为关键字参数传递。这是为了强制执行更好的代码,并允许未来更改时降低破坏现有代码的风险。

更改 Figure.number#

更改 Figure.number 已弃用。此值由 pyplot 用于标识图表。它必须与 pyplot 内部状态保持同步,不应由用户修改。

PdfFile.hatchPatterns#

... 已弃用。

(子)图的 set_figure 方法#

...已弃用,将来将始终引发异常。(子)图的父图和根图在实例化时设置,不能更改。

Poly3DCollection.get_vector#

... 已弃用,无替代。

弃用了 matplotlib.patches._Styles 及其子类上的 register#

此类方法从不在内部使用。由于该方法内部的检查,它只接受嵌入在宿主类中的私有基类的子类,这使得它不太可能在外部使用。

matplotlib.validate_backend#

...已弃用。请改用 matplotlib.rcsetup.validate_backend

matplotlib.sanitize_sequence#

...已弃用。请改用 matplotlib.cbook.sanitize_sequence

ft2font 模块级常量被枚举替代#

ft2font 级别的常量已转换为 enum 类,所有使用它们的 API 现在都接受/返回新类型。

以下常量现在是 ft2font.Kerning 的一部分(不带 KERNING_ 前缀)

  • KERNING_DEFAULT

  • KERNING_UNFITTED

  • KERNING_UNSCALED

以下常量现在是 ft2font.LoadFlags 的一部分(不带 LOAD_ 前缀)

  • LOAD_DEFAULT

  • LOAD_NO_SCALE

  • LOAD_NO_HINTING

  • LOAD_RENDER

  • LOAD_NO_BITMAP

  • LOAD_VERTICAL_LAYOUT

  • LOAD_FORCE_AUTOHINT

  • LOAD_CROP_BITMAP

  • LOAD_PEDANTIC

  • LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH

  • LOAD_NO_RECURSE

  • LOAD_IGNORE_TRANSFORM

  • LOAD_MONOCHROME

  • LOAD_LINEAR_DESIGN

  • LOAD_NO_AUTOHINT

  • LOAD_TARGET_NORMAL

  • LOAD_TARGET_LIGHT

  • LOAD_TARGET_MONO

  • LOAD_TARGET_LCD

  • LOAD_TARGET_LCD_V

以下常量现在是 ft2font.FaceFlags 的一部分

  • EXTERNAL_STREAM

  • FAST_GLYPHS

  • FIXED_SIZES

  • FIXED_WIDTH

  • GLYPH_NAMES

  • HORIZONTAL

  • KERNING

  • MULTIPLE_MASTERS

  • SCALABLE

  • SFNT

  • VERTICAL

以下常量现在是 ft2font.StyleFlags 的一部分

  • ITALIC

  • BOLD

FontProperties 初始化#

FontProperties 初始化仅限于两种调用模式:

  • 单个位置参数,解释为 fontconfig 模式

  • 仅关键字参数用于设置单个属性

所有其他以前支持的调用模式均已弃用。

AxLinexy1xy2 设置器#

这些设置器现在各自接受一个参数,xy1xy2 作为元组。旧的格式,即 xy 作为单独参数传递的方式,已弃用。

使用现有的非极坐标轴调用 pyplot.polar()#

这目前会将数据绘制到非极坐标轴中,忽略“极坐标”意图。此用法情景已弃用,将来将引发错误。

RendererAgg.draw_text_image 传递浮点值#

任何传递给 xy 参数的浮点值都会被静默截断为整数。此行为现已弃用,只应使用 int 值。

FT2Image 传递浮点值#

任何传递给 FT2Image 构造函数,或 FT2Image.draw_rect_filledx0y0x1y1 参数的浮点值都会被静默截断为整数。此行为现已弃用,只应使用 int 值。

boxplotbxpvert 参数,以及 rcParams["boxplot.vertical"]#

boxplotbxp 上的参数 vert: bool 已弃用。为保持 API 一致性,它被 orientation: {"vertical", "horizontal"} 所取代。

控制 boxplot 方向的 rcParams["boxplot.vertical"] 已弃用,无替代。

此弃用目前标记为待定,并将在 Matplotlib 3.11 中完全弃用。

violinplotviolinvert 参数#

violinplotviolin 上的参数 vert: bool 已弃用。为保持 API 一致性,它将由 orientation: {"vertical", "horizontal"} 取代。

此弃用目前标记为待定,并将在 Matplotlib 3.11 中完全弃用。

proj3d.proj_transform_clip#

... 已弃用,无替代。

移除#

ttconv 已移除#

matplotlib._ttconv 扩展已移除。其大部分功能已被其他代码取代,唯一剩下的是以 Type 42 格式在 PostScript 中嵌入 TTF 字体。这现在在 PS 后端使用 FontTools 库完成。

移除 LocationEvent 中对 lastevent 的硬引用#

这以前用于检测坐标轴退出,但是硬引用会使已关闭的 Figure 对象及其子对象存活时间超出预期。

ft2font.FT2Image.draw_rectft2font.FT2Font.get_xys#

... 已移除,因为它们未被使用。

Tick.set_labelTick.set_label1Tick.set_label2#

... 已移除。从第三方代码调用这些方法通常无效,因为标签会在绘制时被刻度格式化器覆盖。

mpl_toolkits.mplot3d.proj3d 中的函数#

函数 transform 只是 proj_transform 的别名,请改用后者。

以下函数要么未被使用(因此在 Matplotlib 中不再需要),要么被视为私有。

  • ortho_transformation

  • persp_transformation

  • proj_points

  • proj_trans_points

  • rot_x

  • rotation_about_vector

  • view_transformation

传递给 get_tightbbox 的除了 renderer 之外的参数#

... 都是仅关键字参数。这是为了保持一致性,以及不同类有不同的附加参数。

方法参数已重命名以匹配基类#

Transform 子类中 transform_affinetransform_non_affine 的唯一参数已重命名为 values

transforms.IdentityTransform.transformpoints 参数已重命名为 values

table.Cell.set_transformtrans 参数已重命名为 t,以与 Artist.set_transform 保持一致。

axis.Axis.set_clip_pathaxis.Tick.set_clip_pathclippath 参数已重命名为 path,以与 Artist.set_clip_path 保持一致。

images.NonUniformImage.set_filternorms 参数已重命名为 filternorm,以与 _ImageBase.set_filternorm 保持一致。

images.NonUniformImage.set_filterrads 参数已重命名为 filterrad,以与 _ImageBase.set_filterrad 保持一致。

Annotation.containsLegend.contains 的唯一参数已重命名为 mouseevent,以与 Artist.contains 保持一致。

方法参数已重命名#

BboxBase.paddedp 参数已重命名为 w_pad,与另一个参数 h_pad 保持一致

LogLocatornumdecs 参数和属性#

... 已移除,无替代,因为它们无效。PolyQuadMesh 类需要完整的二维值数组 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以前,如果输入一个掩码数组,集合中的多边形列表会缩小到有效多边形的大小,用户需要跟踪哪些多边形被绘制,并使用较小的“压缩”数组大小调用 set_array()。传递“压缩”和展平的数组值将不再有效,应将完整的二维值数组(包括掩码)传递给 PolyQuadMesh.set_arrayContourSet.collections ~~~~~~~~~~~~~~~~~~~~~~~~~~

... 已移除。ContourSet 现在实现为单个 Collection 路径集合,每条路径对应一个等高线级别,可能包含多个不连接的组件。

ContourSet.antialiased#

... 已移除。请改用 get_antialiasedset_antialiased。请注意,get_antialiased 返回一个数组。

ContourSettcolorstlinewidths 属性#

... 已移除。请改用 get_facecolorget_edgecolorget_linewidths

ContourLabelercalc_label_rot_and_inline 方法#

... 已移除,无替代。

ContourLabeleradd_label_clabeltext 方法#

... 已移除。请改用 add_label。将额外的位置参数传递给 Figure.add_axes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以前,传递给 Figure.add_axes 的位置参数(除了 rect 或现有 Axes 之外)会被忽略,现在则会引发错误。

明确传入的艺术家将不再根据其标签被 legend() 过滤#

以前,如果明确传递给 legend(handles=[...]) 的艺术家的标签以下划线开头,则会被过滤掉。此过滤器不再应用;如有必要,请明确过滤掉此类艺术家([art for art in artists if not art.get_label().startswith('_')])。

请注意,如果根本未指定任何句柄,则默认仍会过滤掉以下划线开头的标签。

Annotation.containsLegend.contains 的参数已重命名为 mouseevent#

... 与 Artist.contains 保持一致。

支持在 annotate(..., arrowprops={"frac": ...}) 中传递 "frac" 键#

... 已移除。自 Matplotlib 1.5 以来,此键已无任何效果。

Table.auto_set_column_width 传递非整数或非整数序列#

列号是整数,以前传递任何其他类型实际上都会被忽略。现在这已成为一个错误。

小部件#

*Selector 部件的 visible 属性获取器已移除;请改用 get_visible

切换后端时自动关闭图形#

允许的后端切换(即那些不将一个 GUI 事件循环与另一个事件循环交换的切换)将不会关闭现有图形。如有必要,请在切换前调用 plt.close("all")

FigureCanvasBase.switch_backends#

... 已移除,无替代。

在事件处理程序返回后访问 event.guiEvent#

... 不再支持,并且 event.guiEvent 在事件处理程序返回后将被设置为 None。对于某些 GUI 工具包,使用事件是不安全的,但您可以自行承担风险单独存储对象。

PdfPages(keep_empty=True)#

零页 PDF 无效,因此不允许向 backend_pdf.PdfPagesbackend_pgf.PdfPages 传递 keep_empty=True,也不允许使用这些类的 keep_empty 属性,且不会创建空的 PDF 文件。

此外,backend_pdf.PdfPages 不再在实例化时立即创建目标文件,而是在保存第一个图表时才创建。要完全控制文件创建,请直接传递已打开的文件对象作为参数(with open(path, "wb") as file, PdfPages(file) as pdf: ...)。

backend_ps.psDefs#

backend_ps 中的 psDefs 模块级变量已移除,无替代。

PostScript 中自动选择纸张大小#

rcParams["ps.papersize"](默认值:'letter')设置为 'auto' 或向 Figure.savefig 传递 papersize='auto' 不再受支持。请传入明确的纸张类型名称,或省略此参数以使用 rcParam 中的默认值。

RendererAgg.tostring_rgbFigureCanvasAgg.tostring_rgb#

... 已移除,无直接替代。可考虑改用 buffer_rgba,它应该能满足大多数用例。

TexManager.texcache#

... 被视为私有并已移除。缓存目录的位置在文档字符串中已澄清。

cbook API 变更#

cbook.Stack 已移除,无替代。

Grouper.clean() 已移除,无替代。Grouper 类现在会自动清理。

cbook.get_sample_datanp_load 参数已移除;get_sample_data 现在会自动加载 numpy 数组。如果需要获取数据文件名称,请改用 get_sample_data(..., asfileobj=False),然后将其传递给 open

使用空 offsets 调用 paths.get_path_collection_extents#

使用空的 offsets 参数调用 get_path_collection_extents 具有模糊的解释,因此不再允许。

没有显式容器地调用 bbox.anchored()#

不再支持不向 BboxBase.anchored 传递 container 参数。

TransformNodeINVALID_NON_AFFINEINVALID_AFFINEINVALID 属性#

这些属性已移除。

axes_grid1 API 变更#

anchored_artists.AnchoredEllipse 已移除。作为替代,请直接构造一个 AnchoredOffsetbox、一个 AuxTransformBox 和一个 Ellipse,如Anchored Artists 中所示。

axes_divider.AxesLocator 类已移除。现在,divider 实例的 new_locator 方法改为返回一个不透明的可调用对象(该对象仍可传递给 ax.set_axes_locator)。

axes_divider.Divider.locate 已移除;请改用 Divider.new_locator(...)(ax, renderer)

axes_grid.CbarAxesBase.toggle_label 已移除。请改用操纵颜色条标签的标准方法(Colorbar.set_label)和刻度标签(Axes.tick_params)。

inset_location.InsetPosition 已移除;请改用 inset_axes

axisartist API 变更#

axisartist.axes_gridaxisartist.axes_rgb 模块(它们提供了结合 axes_grid1axisartist 功能的封装器)已移除;请直接使用例如 AxesGrid(..., axes_class=axislines.Axes) 作为替代。

将 axisartist Axes 视为 axis 的用法已移除;请明确调用该方法作为替代。

floating_axes.GridHelperCurveLinear.get_data_boundary 已移除。请使用 grid_finder.extreme_finder(*[None] * 5) 来获取网格的极值。

开发变更#

文档特定的自定义 Sphinx 角色现在是半公开的#

对于从 Matplotlib 派生类型的第三方包,我们使用自定义角色可能会阻止 Sphinx 构建其文档。这些自定义 Sphinx 角色现在仅为了在从 Matplotlib 类型派生的项目中使用的目的而公开。有关详细信息,请参阅 matplotlib.sphinxext.roles

依赖项的最低支持版本提升#

对于 Matplotlib 3.10,最低支持版本正在提升。

依赖项

mpl3.9 中的最低版本

mpl3.10 中的最低版本

Python

3.9

3.10

这与我们的依赖项版本策略SPEC0 保持一致