3.8.0 的 API 变更#
行为变化#
Tk 后端在保存图形时尊重文件格式选择#
当从Tkinter GUI保存一个没有扩展名的文件名时,文件格式现在根据下拉菜单的值来选择,而不是默认选择PNG。当文件名包含扩展名,或操作系统自动附加扩展名时,行为保持不变。
最大和最小次刻度的放置#
次要刻度位置的计算已得到修正,使得最大和最小次要刻度更加一致。在某些情况下,这会导致轴上多出一个次要刻度。
hexbin 现在默认使用 rcParams["patch.linewidth"]#
Axes.hexbin 的 linewidths 参数的默认值已从 1.0 更改为 rcParams["patch.linewidth"] (default: 1.0)。这提高了与 Axes.pcolormesh 和 Axes.hist2d 中的 QuadMesh 的一致性。
TwoSlopeNorm 现在自动扩展,始终具有两个斜率#
在 vmin 或 vmax 没有手动指定给 TwoSlopeNorm 的情况下,并且数据缩放的值全部小于或大于中心点时,现在会自动扩展限制,使得中心点两侧有两条对称大小的斜坡。
之前 vmin 和 vmax 在中心点处被裁剪,这在显示色条时会导致问题。
当用户手动指定 vmin 和 vmax 时,这不会影响行为。
为 axes_leave_event 发出的事件对象#
axes_leave_event 现在发出一个合成的 LocationEvent,而不是重用与 motion_notify_event 关联的最后一个事件对象。
Streamplot 现在如果没有任何宽度或颜色变化,会将流线绘制为一块。#
由于在没有颜色变化或宽度变化的情况下,无需逐段绘制流线,现在 streamplot 将一次性绘制每条流线。
对于不同宽度或不同颜色的行为没有改变,这些类型的流图使用相同的逻辑。
canvas 参数现在对于 FigureFrameWx 是必需的#
FigureFrameWx 现在在构造时需要一个仅关键字的 canvas 参数。
ContourSet 现在是一个单一的集合#
在此版本之前,ContourSet`(由 `~.Axes.contour 返回的对象)是一个自定义对象,持有多个 Collection`(而不是 `.Artist)——每个级别对应一个集合,该级别等高线的每个连通分量是相应集合中的一个条目。
ContourSet 现在是一个普通的 Collection (因此也是一个 Artist)。该集合包含每个等高线级别的单一路径;如果存在多个连通分量,则此路径可能是不连续的。
现在通常可以使用标准集合设置器来设置ContourSet的属性(例如使用``cset.set_linewidth(3)``来设置相同的线宽,或者使用``cset.set_linewidth([1, 2, 3, ...])``来为每个级别设置不同的线宽),而不必通过各个子组件(cset.collections[0].set_linewidth(...))。请注意,在过渡期间,仍然可以访问(已弃用)的``.collections``属性;这会导致ContourSet修改自身以使用旧式的多集合表示。
SubFigure 的默认 facecolor 现在是透明的#
子图的默认facecolor已更改为``"none"``。以前默认值是``figure.facecolor``的值。
弃用后的API变更#
dviread.find_tex_file现在在请求的文件名未找到时会引发FileNotFoundError。Figure.colorbar现在会在未提供 cax 且无法确定从哪个 Axes 窃取空间时引发错误,即如果也未提供 ax 且 mappable 未添加到 Axes 中。pyplot.subplot和pyplot.subplot2grid不再自动移除预先存在的重叠 Axes;根据需要显式调用Axes.remove。
现在,Annotation xycoords 的无效类型会引发 TypeError#
之前,在某些情况下会引发 RuntimeError。
Text 和 Annotation 的默认抗锯齿行为更改#
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"] (default: True) 进行设置 - 这意味着它们的抗锯齿设置不能再通过修改 rcParams["text.antialiased"] (default: 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.papertype"] rcParam 设置为 'figure',这将使用与正在保存的图形大小完全对应的纸张尺寸。
hexbin mincnt 参数始终包含#
之前,在没有提供 C 的情况下,mincnt 是包含的,但在提供 C 的情况下是排除的。现在,在这两种情况下,mincnt 都是包含的。
弃用#
调用 paths.get_path_collection_extents 时,如果 offsets 为空#
调用 get_path_collection_extents 时,如果 offsets 参数为空,其解释具有歧义,因此已被弃用。当弃用期结束后,这将产生一个错误。
axes_grid1.axes_divider API 变更#
AxesLocator 类已被弃用。现在,分隔符实例的 new_locator 方法返回一个不透明的可调用对象(仍可以传递给 ax.set_axes_locator)。
Divider.locate 已被弃用;请改用 Divider.new_locator(...)(ax, renderer)。
bbox.anchored() 没有显式容器#
现在不传递 container 参数给 BboxBase.anchored 已被弃用。
mpl_toolkits.mplot3d.proj3d 中的函数#
函数 transform 只是 proj_transform 的别名,请使用后者。
以下函数要么未被使用(因此在 Matplotlib 中不再需要),要么被视为私有。如果您依赖它们,请复制代码,包括所有以 _ 开头的函数(被视为私有)。
ortho_transformationpersp_transformationproj_pointsproj_trans_pointsrot_xrotation_about_vectorview_transformation
get_tightbbox 除了 renderer 以外的参数#
... 是仅关键字参数。这是为了保持一致性,并且不同的类有不同的附加参数。
pcolor() 返回的对象已更改为 PolyQuadMesh 类#
旧对象是一个带有展平顶点和数组数据的 PolyCollection。新的 PolyQuadMesh 类继承自 PolyCollection,但增加了更好的二维坐标和数组处理,与 QuadMesh 保持一致。以前,如果输入的是一个掩码数组,集合中的多边形列表会缩小到有效多边形的大小,用户需要跟踪哪些多边形被绘制,并使用较小的“压缩”数组大小调用 set_array()。现在,传递“压缩”和展平的数组值已被弃用,应将完整的二维数组值(包括掩码)传递给 PolyQuadMesh.set_array。
LocationEvent.lastevent#
... 已被弃用,没有替代品。
.ContourSet 的 allsegs、allkinds、tcolors 和 tlinewidths 属性#
这些属性已被弃用;如果需要,可以直接从 ContourSet.get_paths() 获取 Path 对象的顶点和代码,并通过 ContourSet.get_facecolor()、ContourSet.get_edgecolor() 和 ContourSet.get_linewidths() 获取颜色和线宽。
ContourSet.collections#
... 已被弃用。 ContourSet 现在实现为一个路径的单一 Collection ,每个路径对应一个等高线级别,可能包括多个不相连的组件。
在弃用期间,访问 ContourSet.collections 将使当前的 ContourSet 实例恢复到旧的对象布局,每个等高线级别都有一个单独的 PathCollection。
TransformNode 的 INVALID_NON_AFFINE、INVALID_AFFINE、INVALID 属性#
这些属性已被弃用。
Grouper.clean()#
没有替换。Grouper 类现在会自动清理自己。
GridHelperCurveLinear.get_data_boundary#
... 已被弃用。使用 grid_finder.extreme_finder(*[None] * 5) 来获取网格的极值。
np_load 参数 cbook.get_sample_data#
此参数已弃用;get_sample_data 现在会自动加载 numpy 数组。请改用 get_sample_data(..., asfileobj=False) 来获取数据文件的文件名,如果需要,可以将其传递给 open。
RendererAgg.tostring_rgb 和 FigureCanvasAgg.tostring_rgb#
... 已被弃用,没有直接替代品。建议使用 buffer_rgba 代替,它应该涵盖大多数用例。
Annotation.contains 和 Legend.contains 的参数被重命名为 mouseevent#
... 与 Artist.contains 一致。
事件处理程序返回后访问 event.guiEvent#
... 已被弃用:对于某些 GUI 工具包,这样做是不安全的。未来,event.guiEvent 将在事件处理程序返回后设置为 None;您可以自行承担风险单独存储该对象。
小部件#
选择器小部件的 visible 属性获取器已被弃用;请使用 get_visible
方法参数已重命名为与基类匹配#
Transform 子类中的 transform_affine 和 transform_non_affine 的唯一参数被重命名为 values。
transforms.IdentityTransform.transform 的 points 参数已重命名为 values。
table.Cell.set_transform 的 trans 参数已更名为 t,与 Artist.set_transform 保持一致。
axis.Axis.set_clip_path 和 axis.Tick.set_clip_path 的 clippath 参数已统一重命名为 path,与 Artist.set_clip_path 一致。
images.NonUniformImage.set_filternorm 的 s 参数已重命名为 filternorm,与 `_ImageBase.set_filternorm 保持一致。
images.NonUniformImage.set_filterrad 的 s 参数已更名为 filterrad,与 `_ImageBase.set_filterrad 保持一致。
numdecs 是 LogLocator 的参数和属性#
... 已被弃用且没有替代品,因为它们没有效果。
ft2font.FT2Image.draw_rect 和 ft2font.FT2Font.get_xys#
... 已被弃用,因为它们未被使用。如果您依赖这些,请告知我们。
backend_ps.psDefs#
backend_ps 中的 psDefs 模块级变量已被弃用,没有替代方案。
可调用轴艺术家 Axes#
调用 axisartist Axes 来表示 axis 已被弃用;请改为显式调用该方法。
AnchoredEllipse 已被弃用#
相反,直接构建一个 AnchoredOffsetbox ,一个 AuxTransformBox ,和一个 Ellipse ,如 锚定艺术家 中所示。
PostScript 中的自动纸张尺寸选择#
将 rcParams["ps.papersize"] (default: 'letter') 设置为 'auto' 或向 Figure.savefig 传递 papersize='auto' 已被弃用。请传递一个明确的纸张类型名称,或省略此参数以使用来自 rcParam 的默认值。
Tick.set_label1 和 Tick.set_label2#
... 已被弃用。从第三方代码调用这些方法通常没有效果,因为标签在绘制时会被刻度格式化器覆盖。
向 Figure.add_axes 传递额外的位置参数#
传递给 Figure.add_axes 的位置参数,除了一个 rect 或一个现有的 Axes 之外,目前被忽略,这样做现在已被弃用。
CbarAxesBase.toggle_label#
... 已被弃用。请改用标准方法来操作颜色条标签(Colorbar.set_label)和刻度标签(Axes.tick_params)。
TexManager.texcache#
... 被认为是私有的并且已弃用。缓存目录的位置在文档字符串中进行了说明。
显式传入的艺术家将不再根据其标签被 legend() 过滤#
目前,显式传递给 legend(handles=[...]) 的艺术家如果其标签以下划线开头,则会被过滤掉。此行为已被弃用;如有必要,请显式过滤此类艺术家([art for art in artists if not art.get_label().startswith('_')])。
FigureCanvasBase.switch_backends#
... 已被弃用,没有替代品。
cbook.Stack 已被弃用#
... 没有替换。
inset_location.InsetPosition 已弃用#
请使用 inset_axes 代替。
axisartist.axes_grid 和 axisartist.axes_rgb#
这些模块,它们提供了结合 axes_grid1 和 axisartist 功能的包装器,已被弃用;请直接使用例如 AxesGrid(..., axes_class=axislines.Axes) 代替。
ContourSet.antialiased#
... 已被弃用;请改用 get_antialiased 或 set_antialiased。 注意 get_antialiased 返回一个数组。
将非整数或非整数序列传递给 Table.auto_set_column_width#
列号是整数,以前传递任何其他类型实际上会被忽略。这在将来会成为错误。
PdfPages(keep_empty=True)#
一个零页的PDF是无效的,因此将 keep_empty=True 传递给 backend_pdf.PdfPages 和 backend_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.MatplotlibDeprecationWarning和matplotlib.cbook.mplDeprecation已被移除;请改用matplotlib.MatplotlibDeprecationWarning。cbook.maxdict;请改用标准库functools.lru_cache。
已弃用模块已移除#
以下已弃用的模块已被移除:
afmdocstringfontconfig_patterntight_bboxtight_layouttype1font
plt.figure() 的参数和 Figure 构造函数#
除了 num、figsize 和 dpi 之外,所有传递给 pyplot.figure 和 Figure 构造函数的参数现在都必须是关键字参数。
stem(..., use_line_collection=False)#
... 不再被支持。这是对以前效率较低的词干线表示方式的一个兼容性回退。
位置 / 关键字参数#
在Artists的构造函数中,除了前几个参数外,其余参数不能再通过位置传递。大多数参数现在只能是关键字参数。
set_xlim、set_ylim、set_zlim、set_rlim 的 emit 和 auto 参数现在仅支持关键字形式。
Collection.set_offset_transform 的 transOffset 参数和图例处理器的各种 create_collection 方法已重命名为 *offset_transform*(与属性名称一致)。
Axes.get_window_extent / Figure.get_window_extent 仅接受 渲染器。这使得 API 与一般的 Artist.get_window_extent API 保持一致。无论如何,所有其他参数都被忽略。
在 LogLocator 和 LogFormatter* 中设置参数的方法#
在 LogFormatter 及其派生子类中,用于设置相应参数的方法 base 和 label_minor 已被移除,并分别替换为 set_base 和 set_label_minor。
在 LogLocator 中,用于设置相应参数的方法 base 和 subs 已被移除。请改用 set_params(base=..., subs=...)。
Axes.get_renderer_cache#
画布现在负责渲染器及其是否缓存,因此 Axes.get_renderer_cache 方法已被移除。替代方法是调用 axes.figure.canvas.get_renderer()。
Axis、Tick、XAxis 和 YAxis 中未使用的方法#
Tick.label 已被移除。请改用 Tick.label1。
以下方法已不再使用,并且已被移除,未提供替代方案:
Axis.get_ticklabel_extentsTick.get_pad_pixelsXAxis.get_text_heightsYAxis.get_text_widths
mlab.stride_windows#
... 已被移除。请改用 numpy.lib.stride_tricks.sliding_window_view。
Axes3D#
dist 属性已被私有化。请改用 Axes3D.set_box_aspect 中的 zoom 关键字参数。
w_xaxis、w_yaxis 和 w_zaxis 属性现已移除。请改用 xaxis、yaxis 和 zaxis。
3D 轴#
mplot3d.axis3d.Axis.set_pane_pos 已被移除。这是一个内部方法,提供的值在绘图过程中会被覆盖。因此,它没有直接访问的必要。
两个辅助函数 mplot3d.axis3d.move_from_center 和 mplot3d.axis3d.tick_update_position 被视为内部函数且已弃用。如果需要这些函数,请从相应的私有方法 _move_from_center 和 _tick_update_position 中获取代码。
checkdep_usetex 已移除#
此方法仅在未找到 LaTeX 安装时用于禁用测试。因此,它被视为私有方法,仅供内部使用。
如果你需要这个,请从之前的版本中引入代码。
date_ticker_factory 已移除#
matplotlib.dates 模块中的 date_ticker_factory 方法已被移除。请改用 AutoDateLocator 和 AutoDateFormatter 以获得更灵活和可扩展的定位器和格式化器。
如果你需要确切的 date_ticker_factory 行为,请从之前的版本复制代码。
transforms.Affine2D.identity()#
... 被移除,取而代之的是直接调用 Affine2D 构造函数且不带参数。
testing.decorators 中的移除项#
未使用的类 CleanupTestCase 和装饰器 cleanup 已被移除。函数 check_freetype_version 被视为内部函数并已移除。请从之前的版本中引入代码。
text.get_rotation()#
... 已被移除,没有替代方案。如有需要,请复制之前的实现。Figure.callbacks 已被移除 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
图形的 callbacks 属性已被移除。唯一的信号是 "dpi_changed",可以用连接到画布的 "resize_event" 来替代,即 figure.canvas.mpl_connect("resize_event", func)。
向 tripcolor 传递过多的位置参数#
... 引发 TypeError (之前忽略的额外参数)。
Colorbar 的 filled 参数已被移除#
此行为已由底层的 ScalarMappable 控制。
小部件#
Selector 小部件的 visible 属性设置器已被移除;请使用 set_visible。相关的获取器也已被弃用,但尚未失效。
Axes3D.set_frame_on 和 Axes3D.get_frame_on 已移除#
Axes3D.set_frame_on 的文档描述为“设置是否绘制3D轴面板”。然而,它对3D轴没有影响,并且正在被 Axes3D.set_axis_on 和 Axes3D.set_axis_off 取代。
杂项内部机制#
axes_grid1.axes_size.AddList;使用 ``sum(sizes, start=Fixed(0))``(例如)来求多个尺寸对象的和。axes_size.Padded;请使用size + pad代替axes_size.SizeFromFunc,axes_size.GetExtentHelperAxisArtistHelper.delta1和AxisArtistHelper.delta2axislines.GridHelperBase.new_gridlines和axislines.Axes.new_gridlines_DummyAxis.dataLim和_DummyAxis.viewLim;请改用get_data_interval()、set_data_interval()、get_view_interval()和set_view_interval()。ImageMagickBase.delay和ImageMagickBase.output_argsMathtextBackend,MathtextBackendAgg,MathtextBackendPath,MathTextWarningTexManager.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.hexifybackend_pdf.Operator和backend_pdf.Op.op已被移除,取而代之的是backend_pdf.Op上的单一标准enum.Enum接口。backend_pdf.fill;如果你依赖这些函数,请将同名的私有函数的代码纳入你的代码库。backend_pgf.LatexManager.texcommand和backend_pgf.LatexManager.latex_headerbackend_pgf.NO_ESCAPEbackend_pgf.common_texificationbackend_pgf.get_fontspecbackend_pgf.get_preamblebackend_pgf.re_mathsepbackend_pgf.writelnbackend_ps.convert_psfragsbackend_ps.quote_ps_string;如果你依赖它,请将类似名称的私有函数的代码纳入你的代码库。backend_svg.escape_attrib;如果你依赖它,请将类似名称的私有函数的代码纳入你的项目中。backend_svg.escape_cdata;如果你依赖它,请将类似名称的私有函数的代码纳入你的代码库。backend_svg.escape_comment;如果你依赖它,请将类似名称的私有函数的代码纳入你的代码中。backend_svg.short_float_fmt;如果你依赖它,请将类似名称的私有函数的代码纳入你的项目中。backend_svg.generate_transform和backend_svg.generate_css
移除已弃用的API#
以下已弃用的API已被移除。除非另有说明,否则如果需要,请将之前的实现纳入您的代码库。
FigureCanvasBase的以下方法:pick``(请改用 ``Figure.pick)、resize、draw_event、resize_event、close_event、key_press_event、key_release_event、pick_event、scroll_event、button_press_event、button_release_event、motion_notify_event、leave_notify_event、enter_notify_event``(对于所有 ``foo_event方法,构造相关的Event对象并调用canvas.callbacks.process(event.name, event)代替)。ToolBase.destroy(改为连接到tool_removed_event)。FigureCanvasAgg.get_renderer的 cleared 参数(改为调用renderer.clear())。以下是
RendererCairo的方法:set_ctx_from_surface和set_width_height``(请使用 ``set_context代替,它会自动推断画布大小)。NavigationToolbar2Tk、NavigationToolbar2GTK3和NavigationToolbar2GTK4的window或win参数和/或属性,以及NavigationToolbar2Tk的lastrect属性backend_gtk3中的error_msg_gtk函数以及icon_filename和window_icon全局变量;backend_wx中的error_msg_wx函数。FigureManagerGTK3Agg和FigureManagerGTK4Agg(使用FigureManagerGTK3代替);RendererGTK3Cairo和RendererGTK4Cairo。NavigationToolbar2Mac.prepare_configure_subplots(请改用configure_subplots)。FigureManagerMac.close.backend_qt中的qApp全局变量(请改用QtWidgets.QApplication.instance())。RendererWx的offset_text_height方法;FigureFrameWx的sizer、figmgr、num、toolbar、toolmanager、get_canvas和get_figure_manager属性或方法(分别使用frame.GetSizer()、frame.canvas.manager、frame.canvas.manager.num、frame.GetToolBar()、frame.canvas.manager.toolmanager、canvas_class 构造函数参数和frame.canvas.manager代替)。FigureFrameWxAgg和FigureFrameWxCairo(分别使用FigureFrameWx(..., canvas_class=FigureCanvasWxAgg)和FigureFrameWx(..., canvas_class=FigureCanvasWxCairo)代替)。.Colorbar的filled属性和draw_all方法(使用figure.draw_without_rendering代替draw_all)。调用
MarkerStyle时未设置 marker 参数或将其设置为 None(应使用MarkerStyle("")代替)。支持没有
required_interactive_framework属性的第三方画布类(这只能在画布类不继承自FigureCanvasBase时发生)。MultiCursor的canvas和background属性;选择器小部件的state_modifier_keys属性。将 useblit、horizOn 或 vertOn 按位置传递给
MultiCursor。支持
seaborn-<foo>样式;请改用seaborn-v0_8-<foo>,或直接使用 seaborn API。
开发变更#
增加到依赖项的最低支持版本#
对于 Matplotlib 3.8,最低支持版本 正在提升:
依赖 |
mpl3.7 中的 min |
min in 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 |
增加到最小支持的可选依赖项#
对于 Matplotlib 3.8,可选依赖项的最低支持版本 正在提升:
依赖 |
mpl3.7 中的 min |
min in 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 的测试)。
某些系统的轮子不再分发#
自 Matplotlib 3.8 起,不再在 PyPI 上提供适用于 32 位 Linux 和 Windows 的预编译轮。
自 Matplotlib 3.8 起,PyPI 不再提供 macOS 的多架构 universal2 轮子。通常,pip 总是优先选择特定架构的(仅限 amd64 或 arm64)轮子,因此这些提供的益处不大。
新的轮子架构#
已添加以下轮子:
基于 musl 的系统