3.4.0 的 API 变更#

行为变化#

约束布局重写#

布局管理器 constrained_layout 被重新编写,采用了不同的外部约束条件,这些条件应能更稳健地处理复杂的子图布局。面向用户的变化有:

  • 一些约束不佳的布局将会有与之前不同的宽度/高度图。

  • 颜色条现在尊重 matplotlib.colorbar.make_axesanchor 关键字参数

  • 颜色条更宽。

  • 不同行或列中的颜色条对齐更加稳健。

  • hspacewspace 选项在 Figure.set_constrained_layout_pads 中的宽度是文档所述的两倍。因此,现在这些选项遵循文档中的说明。

此功能将保持“实验性”状态,直到新变化被用户充分使用,因此我们预计在版本3.5或3.6中。另一方面,constrained_layout 在库中的示例中经过了广泛测试和使用,因此使用它应该是安全的,但随着更多开发的进行,布局可能不会完全相同。

使用 constrained_layout 的详细信息及其算法可在 约束布局指南 中找到

plt.subplot 重新选择而不使用关键字参数#

.pyplot.subplot 的目的是在使用隐式 pyplot API 时,便于创建和重新选择 Figure 中的 Axes。在创建新的 Axes 时,可以选择投影(例如极坐标、3D 或各种地图投影),还可以通过传递额外的关键字参数给创建的 Axes 子类。

第一次调用 pyplot.subplot 时,对于 Axes 网格中的给定位置,它总是使用传递的参数和投影(默认为矩形)创建并返回一个新的 Axes。在后续调用 pyplot.subplot 时,我们需要确定是否存在一个现有的 Axes:a) 具有等效参数,在这种情况下,它应被选为当前 Axes 并返回,或者 b) 具有不同参数,在这种情况下,将创建一个新的 Axes,并移除现有的 Axes。这就引出了“等效参数”是什么的问题。

以前,如果关键字参数(除了 projection 之外)匹配,即使投影不同,现有的 Axes 子类(除了 Axes3D)也会被视为等同于 2D 直角坐标系。因此:

ax1 = plt.subplot(1, 1, 1, projection='polar')
ax2 =  plt.subplots(1, 1, 1)
ax1 is ax2

我们正在接受这种长期存在的行为,以确保在没有传递任何关键字参数(任何类型)给 pyplot.subplot 的情况下,返回任何现有的 Axes,而不考虑最初创建它时使用的关键字或投影。当向原始 Axes 传递了额外关键字时,这将导致行为发生变化:

ax1 = plt.subplot(111, projection='polar', theta_offset=.75)
ax2 = plt.subplots(1, 1, 1)
ax1 is ax2         # new behavior
# ax1 is not ax2   # old behavior, made a new axes

ax1 = plt.subplot(111, label='test')
ax2 = plt.subplots(1, 1, 1)
ax1 is ax2         # new behavior
# ax1 is not ax2   # old behavior, made a new axes

出于同样的原因,如果存在一个非直角坐标系的 Axes,传递 projection='rectilinear' 将重用现有的 Axes

ax1 = plt.subplot(projection='polar')
ax2 = plt.subplot(projection='rectilinear')
ax1 is not ax2     # new behavior, makes new Axes
# ax1 is ax2       # old behavior

与用户的要求相反。

之前由于一个不相关的错误(也在 Matplotlib 3.4 中修复),Axes3D 无法通过 pyplot.subplot 重新选择。虽然 Axes3D 现在与其他所有投影一致,但对于 :: 的行为有所改变。

plt.subplot(projection='3d')  # create a 3D Axes

plt.subplot()                 # now returns existing 3D Axes, but
                              # previously created new 2D Axes

plt.subplot(projection='rectilinear')  # to get a new 2D Axes

ioffion 可以作为上下文管理器使用#

pyplot.ionpyplot.ioff 现在可以分别作为上下文管理器来创建一个交互模式开启或关闭的上下文。这些函数的旧有调用行为仍然保留。要使用新功能,请按如下方式调用:

with plt.ioff():
   # non-interactive code

定位器和格式化器必须在类层次结构中#

轴定位器和格式化器现在必须是 LocatorFormatter 的子类。

每日间隔的日期定位器现在返回月份的中间日期#

matplotlib.dates.AutoDateLocator 有一个默认设置 interval_multiples=True,它会尝试将刻度与有意义的间隔(如月初或一天的开始等)对齐。这导致大约140天的间隔被映射到每月的1日和22日。现在这一行为已被更改,以便选择每月的1日和15日,这可能是大多数人想要的。

ScalarFormatter useLocale 选项遵循分组#

ScalarFormatter 选项 useLocale 被启用(或 rcParams["axes.formatter.use_locale"] (default: False) 为 True)且配置的区域设置使用分组时,将根据 locale.format_string 添加分隔符。

Axes.errorbar 正确地循环非颜色属性#

以前,如果明确指定了颜色,即使属性循环器用于其他属性(如线型),Axes.errorbar 也会错误地跳过 Axes 属性循环。现在,Axes.errorbar 将像 Axes.plot 那样推进 Axes 属性循环,即只要循环器中的所有属性没有被明确传递。

pyplot.specgram 总是使用 origin='upper'#

之前,如果 rcParams["image.origin"] (default: 'upper') 被设置为 'upper' 以外的值,或者 origin 关键字参数被传递了一个 'upper' 以外的值,频谱图本身会翻转,但 Axes 仍会保持为 'upper' 的 origin 值进行定向,导致最终的图表标签错误。

现在,origin 关键字参数不受支持,并且 image.origin rcParam 被忽略。函数 matplotlib.pyplot.specgram 强制使用 origin='upper',以确保绘制的频谱图的坐标轴是正确的。

作为关键字参数传递的 xunits=None 和 yunits=None 被视为“无操作”#

Axes 上的许多(但不是所有)方法接受(未记录的)关键字参数 xunitsyunits,这些参数将通过调用 Axis.set_unitsAxis.update_units 来更新给定轴的单位。

之前,如果传递了 None ,它会清除存储在 .Axis.units 中的值,这反过来会破坏依赖于 .Axis.units 值正常工作的转换器(特别是 StrCategoryConverter)。

这改变了 ax.meth(..., xunits=None, yunits=None) 的语义,从“请清除单位”变为“像它们未被传递一样执行默认操作”,这与 Matplotlib 关键字参数的标准行为一致。

如果你依赖于向绘图方法传递 xunits=None 来清除 .Axes.units 属性,请直接调用 Axis.set_units (如果还需要更新转换器,则调用 Axis.update_units)。

使用 annotation_clip 的注释不再影响 tight_layout#

之前,text.Annotation.get_tightbbox 总是返回对象的完整 text.Annotation.get_window_extent,与 annotation_clip 的值无关。现在,text.Annotation.get_tightbbox 正确地考虑了这个额外的裁剪框,这意味着由于 annotation_clip 而未绘制的 Annotation 将不会计入 Axes 边界框计算中,例如由 tight_layout 完成的那些计算。

这与 Artist 中描述的 API 现在是一致的,该 API 指定了 get_window_extent 应该返回完整范围,而 get_tightbbox 应该“考虑任何剪裁”。

寄生轴 pcolor 和 pcolormesh 现在默认将网格边缘放置在整数位置,而不是半整数位置#

这与 pcolorpcolormesh 是一致的。

Colorbar 轮廓现在是一个 Spine#

Colorbar 的轮廓现在是一个 Spine 并作为一个整体绘制,而不是作为一个艺术家绘制的 Polygon。这确保它将始终在所有艺术家之后绘制(即,在顶部),与普通 Axes 上的 Spines 一致。

Colorbar.dividers 更改#

此属性现在始终是一个 LineCollection -- 如果 drawedgesFalse,则为一个空的集合。其默认颜色和线宽(rcParams["axes.edgecolor"] (default: 'black'),rcParams["axes.linewidth"] (default: 0.8))现在在实例化时解析,而不是在绘制时解析。

在注册颜色映射两次时引发或警告#

当使用 matplotlib.cm.register_cmap 注册用户提供或第三方颜色映射时,如果尝试覆盖内置颜色映射,现在会引发 ValueError,如果尝试覆盖用户注册的颜色映射,则会发出警告。未来可能会对用户注册的颜色映射引发错误。

连续的光栅化绘制现在已合并#

栅格绘制深度的跟踪已从 backend_mixed.MixedModeRenderer.start_rasterizingbackend_mixed.MixedModeRenderer.stop_rasterizing 移至 artist.allow_rasterization。这意味着开始和停止函数仅在实际需要开始和停止栅格化时才会被调用。

在光栅化元素合并的情况下,矢量后端输出将会改变。这不应改变输出的外观。

第三方后端的渲染现在预期 self._raster_depthself._rasterizing 分别初始化为 0False

不同后端下 draw_if_interactive() 的一致行为#

pyplot.draw_if_interactive 在 Tk 和 nbAgg 后端上不再显示窗口(如果它之前未显示),与其他所有后端一致。

艺术家属性 rasterized 不能再为 None#

现在它是一个布尔值。之前默认值是 None ,并且 Artist.set_rasterized 的文档中提到接受 None 。然而, None 并没有特殊含义,被视为 False

Canvas 的回调注册表现在存储在 Figure 上#

用于处理Figure/Canvas事件的 CallbackRegistry 的规范位置已从Canvas移动到Figure。这一更改对几乎所有用户来说应该是透明的,然而,如果您在Canvas之上或反之切换Figure,您可能会看到行为的变化。

跨后端协调的关键事件数据#

支持键翻译的不同后端现在将“Shift”视为有时修饰符,如果在进行键翻译时不会添加 'shift+' 前缀。

在 Qt5 后端中,matplotlib.backends.backend_qt5.SPECIAL_KEYS 字典包含的键不会返回它们的 Unicode 名称,而是有手动指定的名称。QtCore.Qt.Key_Meta 的名称已更改为 'meta',以与其他 GUI 后端保持一致。

WebAgg 后端现在能够正确处理非美式键盘布局上的按键翻译。

在 GTK 和 Tk 后端中,对非 ASCII 按键的处理(如在传递给 key_press_event 处理程序的 KeyEvent 中报告的)现在正确报告 Unicode 字符(例如,€),并且更好地尊重数字键盘上的 NumLock。

在GTK和Tk后端中,以下键名已更改;新名称与Qt后端报告的名称一致:

  • “Break/Pause”键(键符号 0xff13)现在报告为 "pause" 而不是 ``"break"``(这也与 X 键名一致)。

  • 数字键盘上的“删除”键现在报告为 "delete" 而不是 "dec"

WebAgg 后端不再将中键点击报告为右键点击#

之前在使用 WebAgg 后端时,通过 fig.canvas.mpl_connect('mouse_button_event', callback) 传递给回调函数的中键点击事件会报告 MouseButton.RIGHT 而不是 MouseButton.MIDDLE

SVG 文件中 XML 标签的 ID 属性现在基于 SHA256 而不是 MD5#

Matplotlib 为 SVG 文件中的各种标签生成唯一的 ID 属性。Matplotlib 之前使用 MD5 哈希的前 10 个字符生成这些唯一 ID。在启用联邦信息处理标准 (FIPS) 的系统上,Python 中无法使用 MD5 哈希算法。现在,Matplotlib 改为使用 SHA256 哈希的前 10 个字符。否则与早期版本的 matplotlib 保存的 SVG 文件匹配的文件,将具有不同的 ID 属性。

RendererPS.set_font 在 AFM 模式下不再是空操作#

RendererPS.set_font 现在在所有情况下都设置当前的 PostScript 字体。

Axes3D 中的自动缩放#

在 Matplotlib 3.2.0 中,对于 2D Axes 的自动缩放进行了更懒惰的处理,即,只有在实际渲染画布或用户查询 Axes 限制时,才会重新计算限制。这一性能改进现在已扩展到 Axes3D。这也修复了 Axes3D 中自动缩放被意外触发的一些问题。

请参阅 2D Axes 的 API 变更 以获取更多详情。

Axes3D 自动添加到 Figure 已被弃用#

新创建的 Axes3D 对象过去会在创建时自动添加到图形中,这与所有其他 Axes 类不同,这导致如果调用 fig.add_subplot(111, projection='3d'),它们会被添加两次。

此行为现已弃用,并将发出警告。新的关键字参数 auto_add_to_figure 控制此行为,并可用于抑制警告。默认值将在 Matplotlib 3.5 中更改为 False,而在 Matplotlib 3.6 中,任何非 False 的值都将导致错误。

在未来,Axes3D 需要显式地添加到图形中

fig = Figure()
# create Axes3D
ax = Axes3d(fig)
# add to Figure
fig.add_axes(ax)

正如需要为其他 axes.Axes 子类所做的那样。或者,可以通过以下方式创建3D投影:

fig.add_subplot(projection='3d')

mplot3d.art3d.get_dir_vector 总是返回 NumPy 数组#

为了保持一致性,get_dir_vector 现在总是返回 NumPy 数组,即使输入是一个包含三个元素的可迭代对象。

更改了斜体和幻想字体定义#

Comic Sans 和 Comic Neue 字体已从默认的 rcParams["font.fantasy"] (default: ['Chicago', 'Charcoal', 'Impact', 'Western', 'xkcd script', 'fantasy']) 列表移动到默认的 rcParams["font.cursive"] (default: ['Apple Chancery', 'Textile', 'Zapf Chancery', 'Sand', 'Script MT', 'Felipa', 'Comic Neue', 'Comic Sans MS', 'cursive']) 设置中,以符合 CSS 字体系列示例,并为了提供在 Microsoft 的核心字体集中存在的草书字体。

docstring.Substitution 现在总是在字符串插值之前对文档字符串进行缩进处理。#

弃用#

Axes 构造函数的额外参数#

Axes 构造函数的其他参数(除了 figrect)将在未来版本中成为仅关键字参数。

pyplot.gcaFigure.gca 关键字参数#

在未来版本中,将不再支持向 pyplot.gcafigure.Figure.gca 传递关键字参数。

Axis.cla, RadialAxis.cla, ThetaAxis.claSpine.cla#

这些方法已被弃用,取而代之的是各自的 clear() 方法。

无效的阴影图案字符不再被忽略#

在指定阴影图案时,未识别的字符将引发弃用警告。未来,这将变为硬错误。

imread 从URL读取#

传递 URL 给 imread() 已被弃用。请打开 URL 进行读取并直接使用 Pillow API(例如 PIL.Image.open(urllib.request.urlopen(url)),或 PIL.Image.open(io.BytesIO(requests.get(url).content)))代替。

is_urlURL_REGEX#

... 已被弃用。(它们之前在顶层 matplotlib 模块中定义。)

matplotlib.style.core 弃用#

STYLE_FILE_PATTERNload_base_libraryiter_user_libraries 已被弃用。

.FancyArrowPatchdpi_cor 属性#

此参数被视为内部使用且已弃用。

boxstyle="custom", bbox_transmuter=... 传递给 FancyBboxPatch#

要使用自定义的框样式,可以直接将其作为 boxstyle 参数传递给 FancyBboxPatch。这在之前已经可以实现,并且与自定义箭头样式和连接样式一致。

BoxStyles 现在可以在不传递 mutation_aspect 参数的情况下调用#

变异方面现在由艺术家本身处理。因此,BoxStyle._Base.__call__mutation_aspect 参数已被弃用,自定义框样式应实现为不需要此参数(出于向后兼容性考虑,可以将其保留为默认值为1的参数)。

ContourLabeler.get_label_coords 已被弃用#

它被视为一个内部辅助工具。

Line2D 和 Patch 不再重复 validJoinvalidCap#

现在,对 joinstyle 和 capstyles 的验证已集中于 rcsetup 中。

通过 set_picker 设置 Line2D 的 pickradius 已不再被弃用#

这取消了在 Matplotlib 3.3.0 中引入的弃用。

MarkerStyle 被认为是不可变的#

MarkerStyle.set_fillstyle()MarkerStyle.set_marker() 已被弃用。请使用相应的参数创建一个新的 MarkerStyle

MovieWriter.cleanup 已被弃用#

清理逻辑现在已完全实现在 MovieWriter.finish 中。第三方电影写入器也应将相关的清理逻辑移至该处,因为未来将不再调用重写的 cleanup

minimumdescent TextArea 的参数/属性#

自 Matplotlib 1.3 以来,offsetbox.TextArea 的行为就像 minimumdescent 始终为 True(无论其设置为何值),因此该参数/属性已被弃用。

colorbar 现在会在 mappable 的 Axes 与当前 Axes 不同时发出警告#

目前,Figure.colorbarpyplot.colorbar 默认从当前的 Axes 中窃取空间来放置颜色条。在未来的版本中,它们将从 mappable 的 Axes 中窃取空间。为了准备这一变化,当当前 Axes 与 mappable 的 Axes 不同时,Figure.colorbarpyplot.colorbar 现在会发出警告。

Colorbar 文档字符串#

以下在 matplotlib.colorbar 中的全局变量已被弃用:colorbar_doccolormap_kw_docmake_axes_kw_doc

ColorbarPatchcolorbar_factory 已被弃用#

所有相关功能已移至 Colorbar 类。

后端弃用#

  • FigureCanvasBase.get_window_titleFigureCanvasBase.set_window_title 已弃用。如果使用 pyplot,请使用 FigureManager 上的相应方法,或者如果嵌入,请使用特定于 GUI 的方法。

  • FigureCanvasTkresize_callback 参数从未在内部使用过,并且已被弃用。可以使用 get_tk_widget().bind('<Configure>', ..., True) 等方式为 FigureCanvasTk 添加 Tk 级别的自定义调整大小事件处理程序。

  • FigureManagerBasekey_pressbutton_press 方法在使用 toolmanager 时错误地没有任何作用,已被弃用,取而代之的是通过 self.canvas.callbacks.process(event.name, event) 直接将事件传递给 CallbackRegistry

  • RendererAgg.get_content_extentsRendererAgg.tostring_rgba_minimized 已被弃用。

  • backend_pgf.TmpDirCleaner 已被弃用,没有替代品。

  • GraphicsContextPS 已被弃用。PostScript 后端现在使用 GraphicsContextBase

wx 后端清理#

_FigureCanvasWxBase.gui_repaintorigin 参数已被弃用,没有替代方案;gui_repaint 现在会自动检测在使用 wx 渲染器时的情况。

NavigationToolbar2Wx.get_canvas 方法已被弃用;如果需要,请直接实例化一个画布(FigureCanvasWxAgg(frame, -1, figure))。

print_<fmt> 方法中未使用的位置参数已被弃用#

canvas 子类实现的 print_<fmt> 方法都没有使用除第一个参数(输出文件名或类文件对象)以外的位置参数,因此这些额外参数已被弃用。

FigureCanvas.print_foo 打印机的 dpi 参数已被弃用#

savefig 机制已经负责将图形的 DPI 设置为所需值,因此 print_foo 可以直接从那里读取。不向 print_foo 传递 dpi 参数可以更清晰地检测传递给 savefig 的未使用参数。

bytes 传递给 FT2Font.set_text#

... 已被弃用,请传递 str 代替。

ps.useafm 已弃用用于 mathtext#

仅使用标准PostScript字体输出mathtext的功能可能已经损坏了一段时间(问题 #18722)。在Matplotlib 3.5中,设置 rcParams["ps.useafm"] (default: False) 将不会对mathtext产生影响。

MathTextParser("bitmap") 已弃用#

相关的API MathtextBackendBitmapMathTextParser.to_maskMathTextParser.to_rgbaMathTextParser.to_pngMathTextParser.get_depth 同样已被弃用。

要将文本字符串转换为图像,可以直接将文本绘制到空的 Figure 上,并使用紧密的 bbox 保存图形,如 将文本转换为图像 所示,或者使用 mathtext.math_to_image

使用 math_to_image 时,可以通过以下方式设置文本颜色,例如:

with plt.rc_context({"text.color": "tab:blue"}):
    mathtext.math_to_image(text, filename)

并且可以通过例如:: 获取一个RGBA数组

from io import BytesIO
buf = BytesIO()
mathtext.math_to_image(text, buf, format="png")
buf.seek(0)
rgba = plt.imread(buf)

弃用 mathtext 内部功能#

以下由 mathtext 模块先前公开的 API 元素被视为实现细节,并且对其的公共访问已被弃用:

  • Fonts 及其所有子类,

  • FontConstantsBase 及其所有子类,

  • Node 及其所有子类,

  • Ship, ship,

  • 错误,

  • Parser,

  • SHRINK_FACTOR, GROW_FACTOR,

  • NUM_SIZE_LEVELS,

  • latex_to_bakoma, latex_to_cmex, latex_to_standard,

  • stix_virtual_fonts,

  • tex2uni.

各种 mathtext 辅助函数的弃用#

来自 mathtext 模块的 MathtextBackendPdfMathtextBackendPsMathtextBackendSvgMathtextBackendCairo 类,以及 RendererPdfRendererPSRendererSVGRendererCairo 上的相应 .mathtext_parser 属性,已被弃用。可以使用 MathtextBackendPath 类来获取数学文本表达式中的字形和矩形列表,并且渲染器特定的逻辑应直接在渲染器中实现。

StandardPsFonts.pswriter 未使用且已弃用。

Widget 类内部#

多个 widgets.Widget 类的内部已被私有化并弃用:

  • AxesWidget.cids

  • Button.cntButton.observers

  • CheckButtons.cntCheckButtons.observers

  • RadioButtons.cntRadioButtons.observers

  • Slider.cntSlider.observers

  • TextBox.cnt, TextBox.change_observersTextBox.submit_observers

渲染器上的3D属性#

在绘制过程中放置在渲染器上的 3D 轴的属性现在已被弃用:

  • renderer.M

  • renderer.eye

  • renderer.vvec

  • renderer.get_axis_position

这些属性都可以通过 Axes3D 访问,所有 Artist 都可以通过 self.axes 访问。

renderer Collection3D/Patch3Ddo_3d_projection 方法的参数#

Collection3DPatch3Ddo_3d_projection 方法中的 renderer 参数不再必要,并且在绘制时传递它已被弃用。

project Line3DCollectiondraw 方法的参数#

Line3DCollectiondraw 方法中的 project 参数已被弃用。请改为显式调用 Line3DCollection.do_3d_projection

plot_surfaceplot_wireframe 的额外位置参数#

除了 XYZ 之外,传递给 plot_surfaceplot_wireframe 的位置参数已被弃用。请改为使用关键字参数传递额外的艺术家属性。

ParasiteAxesAuxTransBase#

该mixin类的功能已移至基类 ParasiteAxesBase 中。因此, ParasiteAxesAuxTransBaseParasiteAxesAuxTransparasite_axes_auxtrans_class_factory 已被弃用。

通常建议使用 HostAxes.get_aux_axes 来创建寄生轴,因为这样可以省去手动将寄生轴添加到 host.parasites 的步骤,并确保它们的 remove() 方法能正常工作。

AxisArtist.ZORDER 属性#

使用 AxisArtist.zorder 代替。

GridHelperBase 无效化#

GridHelperBase.invalidateGridHelperBase.validaxislines.Axes.invalidate_grid_helper 方法被视为内部方法且已弃用。

sphinext.plot_directive.align#

... 已弃用。请改用 docutils.parsers.rst.directives.images.Image.align

移除#

以下已弃用的API已被移除:

移除的行为#

  • AxisSpine 上的“智能边界”功能已被删除,相关方法也已被移除。

  • to_rgba_array 中转换包含单色字符的字符串(例如 'cymk')不再被支持。取而代之的是,颜色可以以列表形式单独传递(例如 ['c', 'y', 'm', 'k'])。

  • mpl_toolkits.axisartist 定位器(这些定位器**不是**与“标准”刻度定位器相同)返回等于 None 的因子,或者将等于 None 的因子传递给 axisartist 格式化器(这些格式化器**不是**与“标准”刻度格式化器相同),不再被支持。请传递等于 1 的因子。

模块#

  • 整个 matplotlib.testing.disable_internet 模块已被移除。可以使用 pytest-remotedata 包 替代。

  • mpl_toolkits.axes_grid1.colorbar 模块及其颜色条实现已被移除,取而代之的是 matplotlib.colorbar

类、方法和属性#

  • .animation.MovieWriterRegistry 方法 .set_dirty().ensure_not_dirty().reset_available_writers() 没有任何作用,并且已被移除。.avail() 方法已被移除;请使用 .list() 来获取可用写入器的列表。

  • matplotlib.artist.Artist.eventsonmatplotlib.container.Container.eventson 属性没有效果,并且已被移除。

  • matplotlib.axes.Axes.get_data_ratio_log 已被移除。

  • matplotlib.axes.SubplotBase.rowNum;请改用 ax.get_subplotspec().rowspan.start

  • matplotlib.axes.SubplotBase.colNum;请改用 ax.get_subplotspec().colspan.start

  • matplotlib.axis.Axis.set_smart_boundsmatplotlib.axis.Axis.get_smart_bounds 已被移除。

  • matplotlib.colors.DivergingNorm 已重命名为 TwoSlopeNorm

  • matplotlib.figure.AxesStack 已被移除。

  • matplotlib.font_manager.JSONEncoder 已被移除;请使用 font_manager.json_dump 来转储 FontManager 实例。

  • matplotlib.ft2font.FT2Image 的方法 .as_array(), .as_rgba_str(), .as_str(), .get_height().get_width() 已被移除。在处理之前,使用 np.asarrayFT2Image 转换为 NumPy 数组。

  • matplotlib.quiver.QuiverKey.quiverkey_doc 已被移除;请改用 matplotlib.quiver.QuiverKey.__init__.__doc__

  • matplotlib.spines.Spine.set_smart_boundsmatplotlib.spines.Spine.get_smart_bounds 已被移除。

  • matplotlib.testing.jpl_units.UnitDbl.checkUnits 已被移除;请改用 units not in self.allowed

  • 未使用的 matplotlib.ticker.Locator.autoscale 方法已被移除(请改为传递轴限制给 Locator.view_limits)。派生的方法 Locator.autoscaleAutoDateLocator.autoscaleRRuleLocator.autoscaleRadialLocator.autoscaleThetaLocator.autoscaleYearLocator.autoscale 也已被移除。

  • matplotlib.transforms.BboxBase.is_unit 已被移除;如果需要,请检查 Bbox 的范围。

  • matplotlib.transforms.Affine2DBase.matrix_from_values(...) 已被移除;请改用(例如)``Affine2D.from_values(...).get_matrix()``。

  • matplotlib.backend_bases.FigureCanvasBase.draw_cursor 已被移除。

  • matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.destroymatplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.init_window 方法已被移除。

  • matplotlib.backends.backend_gtk.ConfigureSubplotsGTK3.window 属性已被移除。

  • matplotlib.backends.backend_macosx.FigureCanvasMac.invalidate 已被移除。

  • matplotlib.backends.backend_pgf.RendererPgf.latexManager 已被移除。

  • matplotlib.backends.backend_wx.FigureFrameWx.statusbarmatplotlib.backends.backend_wx.NavigationToolbar2Wx.set_status_barmatplotlib.backends.backend_wx.NavigationToolbar2Wx.statbar 已被移除。状态栏可以通过调用标准的 wx 方法来获取(frame.GetStatusBar()toolbar.GetTopLevelParent().GetStatusBar())。

  • matplotlib.backends.backend_wx.ConfigureSubplotsWx.configure_subplotsmatplotlib.backends.backend_wx.ConfigureSubplotsWx.get_canvas 已被移除。

  • mpl_toolkits.axisartist.grid_finder.GridFinderBase 已被移除;请改用 GridFinder

  • mpl_toolkits.axisartist.axis_artist.BezierPath 已被移除;请改用 patches.PathPatch

函数#

  • matplotlib.backends.backend_pgf.repl_escapetextmatplotlib.backends.backend_pgf.repl_mathdefault 已被移除。

  • matplotlib.checkdep_ps_distiller 已被移除。

  • matplotlib.cm.revcmap 已被移除;请改用 Colormap.reversed

  • matplotlib.colors.makeMappingArray 已被移除。

  • matplotlib.compare_versions 已被移除;请改用 distutils.version.LooseVersion 的比较。

  • matplotlib.dates.mx2num 已被移除。

  • matplotlib.font_manager.createFontList 已被移除;现在可以使用 font_manager.FontManager.addfont 在给定路径注册字体。

  • matplotlib.get_home 已被移除;请改用标准库。

  • matplotlib.mlab.apply_windowmatplotlib.mlab.stride_repeat 已被移除。

  • matplotlib.rcsetup.update_savefig_format 已被移除;它只是将 'auto' 替换为 'png',所以请做同样的操作。

  • matplotlib.rcsetup.validate_animation_writer_path 已被移除。

  • matplotlib.rcsetup.validate_path_exists 已被移除;请改用 os.path.existspathlib.Path.exists

  • matplotlib.style.core.is_style_filematplotlib.style.core.iter_style_files 已被移除。

  • matplotlib.testing.is_called_from_pytest 已被移除。

  • mpl_toolkits.mplot3d.axes3d.unit_bbox 已被移除;请改用 Bbox.unit

参数#

rcParams#

sample_data 删除#

以下列出的示例数据集已被移除。括号中列出了用于演示的建议替代品。

  • None_vs_nearest-pdf.png,

  • aapl.npz (使用 goog.npz),

  • ada.png, grace_hopper.png (使用 grace_hopper.jpg),

  • ct.raw.gz (使用 s1045.ima.gz),

  • damodata.csv (使用 msft.csv)。

开发变化#

增加到Python和依赖项的最低支持版本#

对于 Matplotlib 3.4,最低支持版本 正在提升:

依赖

min in mpl3.3

min in mpl3.4

Python

3.6

3.7

dateutil

2.1

2.7

numpy

1.15

1.16

pyparsing

2.0.3

2.2.1

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

Qhull 在构建或分发时下载#

与 FreeType 类似,Qhull 现在在构建时或创建 sdist 时下载。要链接到系统 Qhull,请在 setup.cfg 文件中将 system_qhull 选项设置为 True。请注意,Matplotlib 现在需要 Qhull 的可重入版本(qhull_r)。

添加了 FigureBase 类,并将 Figure 类设为子类#

新的子图功能促使对 figure.Figure 类进行了一些重新组织,以便新的 figure.SubFigure 类能够拥有图形的所有功能。

figure.Figure 类现在是 figure.FigureBase 的子类,其中 figure.FigureBase 包含图级别的艺术家添加例程,而 figure.Figure 子类仅包含外层图独有的功能。

请注意,与子图相关联的是一个新的 transSubfigure 变换。这个变换也存在于 Figure 实例中,并且在那种情况下等于 transFigure,因此使用变换堆栈的代码如果希望将对象放置在父图或其中一个子图上,应使用 transSubfigure