3.8.0 版 API 变更#

行为变更#

Tk 后端在保存图片时会尊重文件格式选择#

现在,当从 Tkinter GUI 保存图形到没有扩展名的文件名时,文件格式会根据下拉菜单的值进行选择,而不是默认使用 PNG。当文件名包含扩展名或操作系统自动附加扩展名时,行为保持不变。

最大和最小次刻度的放置#

次刻度位置的计算已得到修正,以使最大和最小次刻度更加一致。在某些情况下,这会导致轴上多出一个次刻度。

hexbin 现在默认使用 rcParams["patch.linewidth"]#

Axes.hexbinlinewidths 参数的默认值已从 1.0 更改为 rcParams["patch.linewidth"](默认值:1.0)。这提高了与 QuadMeshAxes.pcolormeshAxes.hist2d 中的一致性。

TwoSlopeNorm 现在会自动扩展以始终具有两个斜率#

在未手动为 TwoSlopeNorm 指定 vminvmax,并且要缩放的数据全部小于或大于中心点的情况下,现在会自动扩展限制,以使中心点两侧有两个对称大小的斜率。

以前 vminvmax 会在中心点处裁剪,这在显示颜色条时导致问题。

当用户手动指定 vminvmax 时,此行为不受影响。

axes_leave_event 发出的事件对象#

axes_leave_event 现在发出一个合成的 LocationEvent,而不是重用与 motion_notify_event 关联的最后一个事件对象。

Streamplot 现在在没有宽度或颜色变化时将流线绘制成一个整体#

由于在没有颜色或宽度变化的情况下不需要逐段绘制流线,现在 streamplot 将每条流线绘制成一个整体。

对于宽度或颜色变化的流线图,行为没有改变,仍使用相同的逻辑。

FigureFrameWx 现在需要 canvas 参数#

FigureFrameWx 在构造时现在需要一个仅限关键字的 canvas 参数。

ContourSet 现在是一个单一的 Collection#

在此版本之前,ContourSet(由 contour 返回的对象)是一个自定义对象,包含多个 Collection(而不是 Artist)——每个级别一个 Collection,该级别等高线的每个连接组件都是相应 Collection 中的一个条目。

ContourSet 现在是一个普通的 Collection(因此也是一个 Artist)。该 Collection 包含每条等高线级别的一条路径;如果存在多个不连续的组件,则此路径可能不连续。

现在,通常可以使用标准 Collection 设置器来设置 ContourSet 的属性(例如 cset.set_linewidth(3) 用于所有等高线使用相同的线宽,或 cset.set_linewidth([1, 2, 3, ...]) 用于为每个级别设置不同的线宽),而无需通过各个子组件(例如 cset.collections[0].set_linewidth(...))。请注意,在过渡期内,仍然可以访问(已弃用的).collections 属性;这会导致 ContourSet 修改自身以使用旧式的多 Collection 表示。

SubFigure 默认填充色现在是透明的#

子图的默认填充色已更改为 "none"。以前的默认值是 figure.facecolor 的值。

弃用后的 API 变更#

Annotation xycoords 的无效类型现在会引发 TypeError#

以前,在某些情况下会引发 RuntimeError

TextAnnotation 的默认抗锯齿行为变更#

matplotlib.pyplot.annotate()matplotlib.pyplot.text() 现在在初始化时支持参数 antialiased。示例

mpl.text.Text(.5, .5, "foo\nbar", antialiased=True)
plt.text(0.5, 0.5, '6 inches x 2 inches', antialiased=True)
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5), antialiased=False)

有关用法的更多详细信息,请参阅“新功能”。

有了这个新功能,您可能需要确保在相同的上下文下创建和保存/显示图形。

# previously this was a no-op, now it is what works
with rccontext(text.antialiased=False):
    fig, ax = plt.subplots()
    ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5))
    fig.savefig('/tmp/test.png')

# previously this had an effect, now this is a no-op
fig, ax = plt.subplots()
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5))
with rccontext(text.antialiased=False):
    fig.savefig('/tmp/test.png')

另请注意,刻度标签的抗锯齿将在创建时(通常在创建 Figure 时)使用 rcParams["text.antialiased"](默认值:True)设置——这意味着通过修改 rcParams["text.antialiased"](默认值:True)无法再更改它们的抗锯齿设置。

ScalarMappable.to_rgba() 现在会尊重 RGB(A) 数组的掩码#

以前,掩码会被忽略。现在,如果任何组件(R、G、B 或 A)被掩码,则 alpha 通道将设置为 0。

Text.get_rotation_mode 返回值#

None 作为 rotation_mode 传递给 Text(默认值)或将其传递给 Text.set_rotation_mode 将使 Text.get_rotation_mode 返回 "default" 而不是 None。其他行为保持不变。

PostScript 纸张尺寸新增使用图形尺寸的选项#

rcParams["ps.papersize"](默认值:'letter')rcParam 现在可以设置为 'figure',这将使用与正在保存的图形尺寸完全对应的纸张尺寸。

hexbinmincnt 参数现在始终包含边界值#

以前,在未提供 C 时,mincnt 包含边界值;在提供 C 时,则不包含边界值。现在,在两种情况下,它都包含 mincnt

matplotlib.mpl_toolkits 现在是一个隐式命名空间包#

setuptools 67.3.0 中弃用 pkg_resources.declare_namespace 之后,matplotlib.mpl_toolkits 现在按照 PEP 420 实现为隐式命名空间。

因此,如果使用 pip 在 Matplotlib < 3.8 的版本之上安装 Matplotlib >= 3.8 的版本(例如通过 pip install --localpython -m venv --system-site-packages ...),将会失败,因为会找到旧的 matplotlib.mpl_toolkits 文件,而所有其他模块都会找到较新的文件。这将导致版本不匹配的错误。

为避免此问题,您需要避免在 sys.path 的不同条目中存在多个 Matplotlib 版本。要么在系统级别卸载 Matplotlib,要么使用更独立的虚拟环境。

弃用#

调用 paths.get_path_collection_extents 并传入空的 offsets#

调用 get_path_collection_extents 时传入空的 offsets 参数的解释不明确,因此已弃用。当弃用期结束时,这将产生一个错误。

axes_grid1.axes_divider API 变更#

AxesLocator 类已弃用。divider 实例的 new_locator 方法现在返回一个不透明的可调用对象(该对象仍然可以传递给 ax.set_axes_locator)。

Divider.locate 已弃用;请改用 Divider.new_locator(...)(ax, renderer)

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

在调用 BboxBase.anchored 时不传递 container 参数现已弃用。

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 之外的参数#

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

pcolor() 返回的对象已更改为 PolyQuadMesh#

旧对象是 PolyCollection,带有扁平化的顶点和数组数据。新的 PolyQuadMesh 类继承自 PolyCollection,但在 2D 坐标和数组处理方面与 QuadMesh 保持一致,提供了更好的处理能力。以前,如果输入的是掩码数组,集合中的多边形列表会缩小到有效多边形的大小,用户需要跟踪哪些多边形被绘制,并使用较小的“压缩”数组大小调用 set_array()。现在,传递“压缩”和扁平化数组值已被弃用,应将完整的 2D 数组值(包括掩码)传递给 PolyQuadMesh.set_array

LocationEvent.lastevent#

... 已弃用,没有替代方案。

ContourSetallsegsallkindstcolorstlinewidths 属性#

这些属性已弃用;如果需要,请直接从 ContourSet.get_paths() 中检索 Path 对象的顶点和代码,并通过 ContourSet.get_facecolor()ContourSet.get_edgecolor()ContourSet.get_linewidths() 检索颜色和线宽。

ContourSet.collections#

... 已弃用。ContourSet 现在实现为单一的 Path Collection,每个 Path 对应一个等高线级别,可能包含多个不连接的组件。

在弃用期间,访问 ContourSet.collections 会将当前的 ContourSet 实例恢复到旧的对象布局,即每个等高线级别一个独立的 PathCollection

TransformNodeINVALID_NON_AFFINEINVALID_AFFINEINVALID 属性#

这些属性已弃用。

Grouper.clean()#

没有替代方案。Grouper 类现在会自动清理自身。

GridHelperCurveLinear.get_data_boundary#

... 已弃用。请改用 grid_finder.extreme_finder(*[None] * 5) 来获取网格的极值。

cbook.get_sample_datanp_load 参数#

此参数已弃用;get_sample_data 现在会自动加载 numpy 数组。如果需要,请改用 get_sample_data(..., asfileobj=False) 来获取数据文件的文件名,然后可以将其传递给 open

RendererAgg.tostring_rgbFigureCanvasAgg.tostring_rgb#

... 已弃用,没有直接替代。请考虑使用 buffer_rgba,它应该涵盖大多数用例。

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

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

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

... 已弃用:对于某些 GUI 工具包,这样做是不安全的。将来,事件处理程序返回后,event.guiEvent 将设置为 None;您可以自行承担风险单独存储该对象。

小部件#

Selector 小部件的 visible 属性 getter 已弃用;请使用 get_visible

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

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 保持一致。

LogLocatornumdecs 参数和属性#

... 已弃用,没有替代方案,因为它们没有效果。

ft2font.FT2Image.draw_rectft2font.FT2Font.get_xys#

... 已弃用,因为它们未使用。如果您依赖这些,请告诉我们。

backend_ps.psDefs#

backend_ps 中的模块级变量 psDefs 已弃用,没有替代方案。

可调用的 axisartist Axes#

将 axisartist Axes 作为 axis 的含义调用已弃用;请显式调用该方法。

AnchoredEllipse 已弃用#

请改用 AnchoredOffsetboxAuxTransformBoxEllipse,具体示例请参见Anchored Artists

PostScript 中的自动纸张尺寸选择#

rcParams["ps.papersize"](默认值:'letter')设置为 'auto' 或将 papersize='auto' 传递给 Figure.savefig 已弃用。请显式传递纸张类型名称,或省略此参数以使用 rcParam 中的默认值。

Tick.set_label1Tick.set_label2#

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

Figure.add_axes 传递额外的位置参数#

目前,除了 rect 或现有 Axes 之外,传递给 Figure.add_axes 的位置参数会被忽略,这样做现已弃用。

CbarAxesBase.toggle_label#

... 已弃用。请改用操作颜色条标签(Colorbar.set_label)和刻度标签(Axes.tick_params)的标准方法。

TexManager.texcache#

... 被认为是私有的并已弃用。缓存目录的位置在 doc-string 中已明确。

显式传入的 Artist 不再根据其标签被 legend() 过滤#

目前,显式传递给 legend(handles=[...]) 的 artist 如果其标签以下划线开头,则会被过滤掉。此行为已弃用;如有必要,请显式过滤掉此类 artist([art for art in artists if not art.get_label().startswith('_')])。

FigureCanvasBase.switch_backends#

... 已弃用,没有替代方案。

cbook.Stack 已弃用#

... 无替代。

inset_location.InsetPosition 已弃用#

请改用 inset_axes

axisartist.axes_gridaxisartist.axes_rgb#

这些模块提供了结合 axes_grid1axisartist 功能的包装器,现已弃用;请直接使用例如 AxesGrid(..., axes_class=axislines.Axes)

ContourSet.antialiased#

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

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

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

PdfPages(keep_empty=True)#

零页的 PDF 文件无效,因此传递 keep_empty=Truebackend_pdf.PdfPagesbackend_pgf.PdfPages,以及这些类的 keep_empty 属性均已弃用。目前,这些类默认保留空输出,但该行为也已弃用。显式传递 keep_empty=False 目前仍受支持,以帮助过渡到新行为。

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

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

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

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

... 已移除。此键自 Matplotlib 1.5 以来已无效。

移除#

cbook 移除#

  • matplotlib.cbook.MatplotlibDeprecationWarningmatplotlib.cbook.mplDeprecation 已移除;请改用 matplotlib.MatplotlibDeprecationWarning

  • cbook.maxdict;请改用标准库的 functools.lru_cache

get_shared_x_axes / get_shared_y_axes 返回的 Groupers 是不可变的#

不再允许修改由 get_shared_x_axesget_shared_y_axes 返回的 Groupers。请注意,以前,调用例如 join() 已经无法为共享轴设置正确的结构;请改用 Axes.sharexAxes.sharey

已移除的弃用模块#

以下弃用模块已移除:

  • afm

  • docstring

  • fontconfig_pattern

  • tight_bbox

  • tight_layout

  • type1font

传递给 plt.figure()Figure 构造函数的参数#

传递给 pyplot.figureFigure 构造函数的所有参数,除了 numfigsizedpi,现在都只能作为关键字参数。

stem(..., use_line_collection=False)#

... 不再受支持。这曾是对旧版低效线段表示的兼容性回退。

位置参数 / 关键字参数#

在 Artist 的构造函数中,除了极少数前几个参数外,不再可能将所有其他参数作为位置参数传递。大多数参数现在都只能作为关键字参数。

set_xlimset_ylimset_zlimset_rlimemitauto 参数现在仅为关键字参数。

Collection.set_offset_transform 以及 legend handler 的各种 create_collection 方法的 transOffset 参数已重命名为 offset_transform(与属性名称保持一致)。

Axes.get_window_extent / Figure.get_window_extent 仅接受 renderer。这使 API 与通用的 Artist.get_window_extent API 对齐。所有其他参数无论如何都会被忽略。

LogLocatorLogFormatter* 中设置参数的方法#

LogFormatter 及其派生子类中,用于设置相应参数的 baselabel_minor 方法已被移除,并分别由 set_baseset_label_minor 替代。

LogLocator 中,用于设置相应参数的 basesubs 方法已被移除。请改用 set_params(base=..., subs=...)

Axes.get_renderer_cache#

画布现在负责渲染器以及是否缓存它,因此 Axes.get_renderer_cache 方法已被移除。替代方法是调用 axes.figure.canvas.get_renderer()

AxisTickXAxisYAxis 中未使用的函数#

Tick.label 现已移除。请改用 Tick.label1

以下方法不再使用并已移除,没有替代方案

  • Axis.get_ticklabel_extents

  • Tick.get_pad_pixels

  • XAxis.get_text_heights

  • YAxis.get_text_widths

mlab.stride_windows#

... 已移除。请改用 numpy.lib.stride_tricks.sliding_window_view

Axes3D#

dist 属性已私有化。请改用 Axes3D.set_box_aspect 中的 zoom 关键字参数。

w_xaxisw_yaxisw_zaxis 属性现已移除。请改用 xaxisyaxiszaxis

3D 轴#

mplot3d.axis3d.Axis.set_pane_pos 已移除。这是一个内部方法,其提供的值在绘制时会被覆盖。因此,它没有直接可访问的任何目的。

两个辅助函数 mplot3d.axis3d.move_from_centermplot3d.axis3d.tick_update_position 被认为是内部函数并已弃用。如果需要它们,请从相应的私有方法 _move_from_center_tick_update_position 中复制代码。

checkdep_usetex 已移除#

此方法仅用于在找不到 latex 安装时禁用测试。因此,它被认为是私有的,仅供内部使用。

如果您需要此功能,请从旧版本中复制代码。

date_ticker_factory 已移除#

matplotlib.dates 模块中的 date_ticker_factory 方法已移除。请改用 AutoDateLocatorAutoDateFormatter,以获得更灵活、可扩展的定位器和格式化器。

如果您需要精确的 date_ticker_factory 行为,请从旧版本中复制代码。

transforms.Affine2D.identity()#

... 已移除,取而代之的是直接调用不带参数的 Affine2D 构造函数。

testing.decorators 中的移除#

未使用的类 CleanupTestCase 和装饰器 cleanup 已移除。函数 check_freetype_version 被认为是内部函数并已移除。请从旧版本中复制代码。

text.get_rotation()#

... 已移除,没有替代方案。如果需要,请复制以前的实现。Figure.callbacks 已移除 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Figure 的 callbacks 属性已移除。唯一的信号是“dpi_changed”,可以用连接到画布上的“resize_event”来代替 figure.canvas.mpl_connect("resize_event", func)

tripcolor 传递过多的位置参数#

... 将引发 TypeError(以前,额外的参数会被忽略)。

Colorbarfilled 参数已移除#

此行为已由底层 ScalarMappable 控制。

小部件#

Selector 小部件的 visible 属性设置器已移除;请使用 set_visible。相关的 getter 也已弃用,但尚未到期。

Axes3D.set_frame_onAxes3D.get_frame_on 已移除#

Axes3D.set_frame_on 文档说明为“设置是否绘制 3D 轴面板”。然而,它对 3D 轴没有影响,因此已被移除,并推荐使用 Axes3D.set_axis_onAxes3D.set_axis_off

杂项内部功能#

  • axes_grid1.axes_size.AddList;请改用 sum(sizes, start=Fixed(0))(例如)来求和多个尺寸对象。

  • axes_size.Padded;请改用 size + pad

  • axes_size.SizeFromFunc, axes_size.GetExtentHelper

  • AxisArtistHelper.delta1AxisArtistHelper.delta2

  • axislines.GridHelperBase.new_gridlinesaxislines.Axes.new_gridlines

  • _DummyAxis.dataLim_DummyAxis.viewLim;请改用 get_data_interval()set_data_interval()get_view_interval()set_view_interval()

  • ImageMagickBase.delayImageMagickBase.output_args

  • MathtextBackendMathtextBackendAggMathtextBackendPathMathTextWarning

  • TexManager.get_font_config;它以前返回一个内部哈希键,用于缓存目的。

  • TextToPath.get_texmanager;请直接构造一个 texmanager.TexManager

  • ticker.is_close_to_int;请改用 math.isclose(x, round(x))

  • ticker.is_decade;请改用 y = numpy.log(x)/numpy.log(base); numpy.isclose(y, numpy.round(y))

特定于后端的功能移除#

  • backend_pdf.Name.hexify

  • backend_pdf.Operatorbackend_pdf.Op.op 已移除,取而代之的是 backend_pdf.Op 上的单一标准 enum.Enum 接口。

  • backend_pdf.fill;如果您依赖这些函数,请复制同名私有函数的代码。

  • backend_pgf.LatexManager.texcommandbackend_pgf.LatexManager.latex_header

  • backend_pgf.NO_ESCAPE

  • backend_pgf.common_texification

  • backend_pgf.get_fontspec

  • backend_pgf.get_preamble

  • backend_pgf.re_mathsep

  • backend_pgf.writeln

  • backend_ps.convert_psfrags

  • backend_ps.quote_ps_string;如果您依赖此功能,请复制同名私有函数的代码。

  • backend_svg.escape_attrib;如果您依赖此功能,请复制同名私有函数的代码。

  • backend_svg.escape_cdata;如果您依赖此功能,请复制同名私有函数的代码。

  • backend_svg.escape_comment;如果您依赖此功能,请复制同名私有函数的代码。

  • backend_svg.short_float_fmt;如果您依赖此功能,请复制同名私有函数的代码。

  • backend_svg.generate_transformbackend_svg.generate_css

已移除的弃用 API#

以下已弃用的 API 已被移除。除非另有说明,否则如果需要,请复制以前的实现。

  • FigureCanvasBase 的以下方法:pick(请改用 Figure.pick)、resizedraw_eventresize_eventclose_eventkey_press_eventkey_release_eventpick_eventscroll_eventbutton_press_eventbutton_release_eventmotion_notify_eventleave_notify_evententer_notify_event(对于所有 foo_event 方法,请构造相关的 Event 对象并调用 canvas.callbacks.process(event.name, event))。

  • ToolBase.destroy(请改连接到 tool_removed_event)。

  • FigureCanvasAgg.get_renderercleared 参数(请改调用 renderer.clear())。

  • RendererCairo 的以下方法:set_ctx_from_surfaceset_width_height(请改用 set_context,它会自动推断画布大小)。

  • NavigationToolbar2TkNavigationToolbar2GTK3NavigationToolbar2GTK4windowwin 参数和/或属性,以及 NavigationToolbar2Tklastrect 属性。

  • backend_gtk3 中的 error_msg_gtk 函数以及 icon_filenamewindow_icon 全局变量;backend_wx 中的 error_msg_wx 函数。

  • FigureManagerGTK3AggFigureManagerGTK4Agg(请改用 FigureManagerGTK3);RendererGTK3CairoRendererGTK4Cairo

  • NavigationToolbar2Mac.prepare_configure_subplots(请改用 configure_subplots)。

  • FigureManagerMac.close.

  • backend_qt 中的 qApp 全局变量(请改用 QtWidgets.QApplication.instance())。

  • RendererWxoffset_text_height 方法;FigureFrameWxsizerfigmgrnumtoolbartoolmanagerget_canvasget_figure_manager 属性或方法(请分别改用 frame.GetSizer()frame.canvas.managerframe.canvas.manager.numframe.GetToolBar()frame.canvas.manager.toolmanagercanvas_class 构造函数参数以及 frame.canvas.manager)。

  • FigureFrameWxAggFigureFrameWxCairo(请分别改用 FigureFrameWx(..., canvas_class=FigureCanvasWxAgg)FigureFrameWx(..., canvas_class=FigureCanvasWxCairo))。

  • Colorbarfilled 属性和 draw_all 方法(请改用 figure.draw_without_rendering,而不是 draw_all)。

  • 调用 MarkerStyle 时不设置 marker 参数或将其设置为 None(请改用 MarkerStyle(""))。

  • 支持没有 required_interactive_framework 属性的第三方画布类(这仅当画布类不继承自 FigureCanvasBase 时才会发生)。

  • MultiCursorcanvasbackground 属性;选择器小部件的 state_modifier_keys 属性。

  • useblithorizOnvertOn 作为位置参数传递给 MultiCursor

  • 支持 seaborn-<foo> 样式;请改用 seaborn-v0_8-<foo>,或直接使用 seaborn API。

开发变更#

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

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

依赖项

mpl3.7 中的最低版本

mpl3.8 中的最低版本

Python

3.8

3.9

kiwisolver

1.0.1

1.3.1

NumPy

1.20.0

1.21.0

Pillow

6.2.1

8.0

这与我们的 依赖版本策略NEP29 一致。

提高可选依赖项的最低支持版本#

对于 Matplotlib 3.8,可选依赖项的最低支持版本正在提升。

依赖项

mpl3.7 中的最低版本

mpl3.8 中的最低版本

Tk

8.4

8.5

Qt

5.10

5.12

  • 没有同时支持 Qt 5.11(或更早版本)和 Python 3.9(或更新版本)的 wheels 或 conda 包。

这与我们的 依赖版本策略 一致。

PEP484 类型提示注解的临时支持#

新的公共 API 应在 .pyi 存根文件中进行类型提示(pyplot 和在线类型化的测试除外)。测试应进行最低限度的类型提示,基本上仅在 mypy 产生错误时进行。

已添加用于运行 mypy 的 CI 和配置。

pyplot.py 的生成需要 black#

pyplot.py 的自动生成部分使用 black 自动格式化,以确保输出代码语法正确、可读。

因此,black 现在是开发和测试的必需项(对于重新生成 pyplot 的测试)。

部分系统的 Wheels 不再分发#

自 Matplotlib 3.8 起,PyPI 不再提供 32 位 Linux 和 Windows 的预编译 wheels。

自 Matplotlib 3.8 起,PyPI 不再提供 macOS 的多架构 universal2 wheels。通常,pip 总是会优先选择特定架构(仅限 amd64arm64)的 wheels,因此这些提供的益处很小。

新的 Wheel 架构#

已添加以下 Wheel:

  • 基于 musl 的系统