3.4.0 版本 API 变更#
行为变更#
受限布局重写#
布局管理器 constrained_layout
已被重写,采用了不同的外部约束,应该能更稳定地处理复杂的子图布局。面向用户的变化包括:
一些约束不佳的布局将显示与以前不同的宽度/高度图。
色条现在遵循
matplotlib.colorbar.make_axes
的anchor
关键字参数。色条更宽。
不同行或列中的色条对齐更稳定。
Figure.set_constrained_layout_pads
的 hspace 和 wspace 选项的宽度是文档所述的两倍。现在它们已遵循文档。
此功能将保持“实验性”状态,直到用户充分使用这些新更改,因此我们预计会在 3.5 或 3.6 版本中稳定。另一方面,constrained_layout
在库中的示例中经过了广泛测试和使用,因此使用它应该是安全的,但随着更多开发进行,布局可能不会完全相同。
有关使用 constrained_layout
及其算法的详细信息,请参见 受限布局指南
不带关键字参数的 plt.subplot
重新选择#
pyplot.subplot
的目的是在严格使用隐式 pyplot API 时,方便在 Figure 中创建和重新选择 Axes。创建新的 Axes 时,可以选择投影(例如极坐标、3D 或各种制图投影),并将额外的关键字参数传递给所创建的 Axes 子类。
第一次在 Axes 网格的给定位置调用 pyplot.subplot
时,它总是创建并返回一个带有传递参数和投影(默认为直角坐标)的新 Axes。在后续调用 pyplot.subplot
时,我们必须确定现有 Axes 是否具有 a) 等效参数,在这种情况下应将其选为当前 Axes 并返回,或 b) 不同参数,在这种情况下将创建新的 Axes 并删除现有 Axes。这留下了一个问题,即什么是“等效参数”。
以前,除了 Axes3D 之外,现有的 Axes 子类如果关键字参数(projection
除外)匹配,即使具有不同的投影,也会被视为等效于 2D 直角坐标 Axes。因此
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
这与用户的请求相悖。
以前,Axes3D 无法通过 pyplot.subplot
重新选择,原因是存在一个不相关的错误(也在 Matplotlib 3.4 中修复)。虽然 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
ioff
和 ion
可用作上下文管理器#
pyplot.ion
和 pyplot.ioff
现在可以作为上下文管理器使用,分别创建交互模式开启或关闭的上下文。调用这些函数的旧行为得以保留。要使用新功能,请按以下方式调用:
with plt.ioff():
# non-interactive code
定位器和格式化程序必须在类层次结构中#
DAILY 间隔的日期定位器现在返回月中日期#
matplotlib.dates.AutoDateLocator
默认设置为 interval_multiples=True
,它尝试将刻度与有意义的间隔(如月初或每日开始)对齐。这导致大约 140 天的间隔映射到每月的第 1 天和第 22 天。现在已更改为选择每月的第 1 天和第 15 天,这可能更符合大多数人的需求。
ScalarFormatter
的 useLocale 选项遵循分组规则#
当 ScalarFormatter
选项 useLocale 启用时(或 rcParams["axes.formatter.use_locale"](默认值:False
)为 True),并且配置的区域设置使用分组,将按照 locale.format_string
中的描述添加分隔符。
Axes.errorbar
正确循环非颜色属性#
以前,如果明确指定了颜色,即使属性循环器是用于其他属性(如线条样式),Axes.errorbar
也会错误地跳过 Axes 属性循环。现在,Axes.errorbar
将像 Axes.plot
一样推进 Axes 属性循环,即只要循环器中的所有属性都没有明确传递,就会推进循环。
pyplot.specgram 始终使用 origin='upper'#
以前,如果 rcParams["image.origin"](默认值:'upper'
)设置为非 'upper'
的值,或者 origin 关键字参数传递了非 'upper'
的值,频谱图本身会翻转,但 Axes 仍会以 'upper'
的原点值定向,从而导致生成的图标记不正确。
现在,不再支持 origin 关键字参数,并且 image.origin
rcParam 被忽略。函数 matplotlib.pyplot.specgram
被强制使用 origin='upper'
,以便 Axes 对于绘制的频谱图是正确的。
将 xunits=None 和 yunits=None 作为关键字参数传递时被视为“无操作”#
Axes
上的许多(但不是全部)方法接受(未文档化的)关键字参数 xunits 和 yunits,它们通过调用 Axis.set_units
和 Axis.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
应“考虑任何裁剪”。
Parasite Axes 的 pcolor 和 pcolormesh 现在默认将网格边缘放置在整数位置,而非半整数位置#
这与 pcolor
和 pcolormesh
一致。
色条轮廓现在是一个 Spine
#
Colorbar
的轮廓现在是一个 Spine
并以其形式绘制,而不是作为艺术家绘制的 Polygon
。这确保它将始终在所有艺术家之后(即之上)绘制,与普通 Axes 上的 Spines 一致。
Colorbar.dividers
变更#
此属性现在始终是一个 LineCollection
——如果 drawedges
为 False,则为空。其默认颜色和线宽(rcParams["axes.edgecolor"](默认值:'black'
),rcParams["axes.linewidth"](默认值:0.8
))现在在实例化时解析,而非在绘制时解析。
重复注册色图时发出错误或警告#
当使用 matplotlib.cm.register_cmap
注册用户提供或第三方色图时,如果尝试覆盖内置色图,现在将引发 ValueError
;如果尝试覆盖用户注册的色图,则会发出警告。未来这可能会对用户注册的色图引发错误。
连续栅格化绘制现在合并#
栅格绘制深度的跟踪已从 backend_mixed.MixedModeRenderer.start_rasterizing
和 backend_mixed.MixedModeRenderer.stop_rasterizing
转移到 artist.allow_rasterization
。这意味着只有在确实需要启动和停止栅格化时,才会调用启动和停止函数。
在栅格化元素合并的情况下,矢量后端输出会发生变化。这不应改变输出的外观。
现在,第三方后端中的渲染器应将 self._raster_depth
和 self._rasterizing
分别初始化为 0
和 False。
后端间 draw_if_interactive()
行为一致#
pyplot.draw_if_interactive
不再在 Tk 和 nbAgg 后端显示窗口(如果以前未显示),这与其他所有后端保持一致。
Artist 属性 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”键(keysym 0xff13)现在报告为
"pause"
,而不是"break"
(这也与 X 键名一致)。数字键盘上的“delete”键现在报告为
"delete"
,而不是"dec"
。
WebAgg 后端不再将中键点击报告为右键点击#
以前,在使用 WebAgg 后端时,fig.canvas.mpl_connect('mouse_button_event', callback)
在中键点击时传递给回调的事件会报告 MouseButton.RIGHT
而不是 MouseButton.MIDDLE
。
在 AFM 模式下 RendererPS.set_font
不再是无操作#
RendererPS.set_font
现在在所有情况下都设置当前的 PostScript 字体。
Axes3D 中的自动缩放#
在 Matplotlib 3.2.0 中,2D Axes 的自动缩放变得更“懒惰”,即只有在实际渲染画布或用户查询 Axes 限制时才重新计算限制。此性能改进现已扩展到 Axes3D
。这也修复了 Axes3D 中意外触发自动缩放的一些问题。
有关更多详细信息,请参见 2D Axes 的 API 变更。
Axes3D 自动将自身添加到 Figure 的行为已被弃用#
新的 Axes3D
对象以前在创建时会将自己添加到 figure 中,这与其他所有 Axes 类不同,导致如果调用 fig.add_subplot(111, projection='3d')
则会添加两次。
此行为现已弃用并会发出警告。新的关键字参数 auto_add_to_figure 控制此行为,可用于抑制警告。默认值将在 Matplotlib 3.5 中更改为 False,而任何非 False 的值都将在 Matplotlib 3.6 中引发错误。
未来,Axes3D
需要显式添加到 figure 中
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 数组,即使输入是 3 元素可迭代对象。
手写体和幻想字体定义已更改#
Comic Sans 和 Comic Neue 字体已从默认的 rcParams["font.fantasy"](默认值:['Chicago', 'Charcoal', 'Impact', 'Western', 'xkcd script', 'fantasy']
)列表移至默认的 rcParams["font.cursive"](默认值:['Apple Chancery', 'Textile', 'Zapf Chancery', 'Sand', 'Script MT', 'Felipa', 'Comic Neue', 'Comic Sans MS', 'cursive']
)设置,这符合 CSS 字体家族的 示例,并且为了提供 Microsoft 核心字体集中存在的手写体字体。
docstring.Substitution
现在总是在字符串插值前取消文档字符串的缩进#
废弃#
Axes 构造函数的额外参数#
Axes 构造函数中除 fig 和 rect 之外的参数将在未来版本中变为仅限关键字参数。
pyplot.gca
和 Figure.gca
关键字参数#
未来版本中将不再支持向 pyplot.gca
或 figure.Figure.gca
传递关键字参数。
Axis.cla
、RadialAxis.cla
、ThetaAxis.cla
和 Spine.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_url
和 URL_REGEX
#
……已弃用。(它们以前定义在顶层的 matplotlib
模块中。)
matplotlib.style.core
弃用#
STYLE_FILE_PATTERN
、load_base_library
和 iter_user_libraries
已弃用。
FancyArrowPatch
的 dpi_cor
属性#
此参数被视为内部参数并已弃用。
将 boxstyle="custom", bbox_transmuter=...
传递给 FancyBboxPatch
#
为了使用自定义的 boxstyle,请将其直接作为 boxstyle 参数传递给 FancyBboxPatch
。这在以前已经可能,并且与自定义箭头样式和连接样式一致。
BoxStyles 现在在调用时不传递 mutation_aspect 参数#
变异纵横比现在由艺术家本身处理。因此,BoxStyle._Base.__call__
的 mutation_aspect 参数已弃用,自定义 boxstyle 应实现为不要求此参数(为了向后兼容,可以将其保留为默认为 1 的参数)。
ContourLabeler.get_label_coords
已弃用#
它被视为内部辅助功能。
Line2D 和 Patch 不再复制 validJoin
和 validCap
#
连接样式和帽盖样式的验证现在集中在 rcsetup
中。
通过 set_picker
设置 Line2D 的选择半径不再弃用#
这取消了 Matplotlib 3.3.0 中引入的弃用。
MarkerStyle
被视为不可变#
MarkerStyle.set_fillstyle()
和 MarkerStyle.set_marker()
已弃用。请改为使用相应参数创建新的 MarkerStyle
。
MovieWriter.cleanup
已弃用#
清理逻辑现在已完全在 MovieWriter.finish
中实现。第三方影片写入器也应将相关清理逻辑移至此处,因为将来将不再调用被重写的 cleanup
。
TextArea
的 minimumdescent 参数/属性#
自 Matplotlib 1.3 以来,offsetbox.TextArea
的行为就如同 minimumdescent 始终为 True(无论其设置为何值),因此此参数/属性已弃用。
colorbar
现在在 mappable 的 Axes 与当前 Axes 不同时发出警告#
目前,Figure.colorbar
和 pyplot.colorbar
默认会从当前 Axes 窃取空间来放置色条。在未来版本中,它们将改为从 mappable 的 Axes 窃取空间。为准备此更改,当当前 Axes 与 mappable 的 Axes 不同时,Figure.colorbar
和 pyplot.colorbar
现在会发出警告。
色条文档字符串#
matplotlib.colorbar
中的以下全局变量已弃用:colorbar_doc
、colormap_kw_doc
、make_axes_kw_doc
。
ColorbarPatch
和 colorbar_factory
已弃用#
所有相关功能已移至 Colorbar
类。
后端弃用#
FigureCanvasBase.get_window_title
和FigureCanvasBase.set_window_title
已弃用。如果使用 pyplot,请使用 FigureManager 上的相应方法;如果嵌入,请使用 GUI 特定的方法。FigureCanvasTk
的 resize_callback 参数在内部从未被使用,现已弃用。Tk 级别的自定义调整大小事件处理程序可以添加到FigureCanvasTk
,例如使用get_tk_widget().bind('<Configure>', ..., True)
。FigureManagerBase
的key_press
和button_press
方法(在使用toolmanager
时错误地不执行任何操作)已弃用,请改为通过self.canvas.callbacks.process(event.name, event)
直接将事件传递给CallbackRegistry
。RendererAgg.get_content_extents
和RendererAgg.tostring_rgba_minimized
已弃用。backend_pgf.TmpDirCleaner
已弃用,无替代方案。GraphicsContextPS
已弃用。PostScript 后端现在使用GraphicsContextBase
。
wx 后端清理#
_FigureCanvasWxBase.gui_repaint
的 origin 参数已弃用,无替代方案;gui_repaint
现在会自动检测与 wx 渲染器一起使用的情况。
NavigationToolbar2Wx.get_canvas
方法已弃用;如果需要,请直接实例化一个画布(FigureCanvasWxAgg(frame, -1, figure)
)。
弃用 print_<fmt>
方法中未使用的位置参数#
画布子类实现的 print_<fmt>
方法均未使用除第一个参数(输出文件名或类文件对象)之外的位置参数,因此这些额外参数已弃用。
弃用 FigureCanvas.print_foo
打印机的 dpi 参数#
savefig
机制已经负责将图形 DPI 设置为所需值,因此 print_foo
可以直接从中读取。不将 dpi 传递给 print_foo
可以更清晰地检测传递给 savefig
的未使用参数。
将 bytes
传递给 FT2Font.set_text
#
……已弃用,请改为传递 str
。
ps.useafm
在数学文本中已弃用#
仅使用标准 PostScript 字体输出数学文本可能已损坏一段时间(问题 #18722)。在 Matplotlib 3.5 中,设置 rcParams["ps.useafm"](默认值:False
)将对数学文本无效。
MathTextParser("bitmap")
已弃用#
相关的 API MathtextBackendBitmap
、MathTextParser.to_mask
、MathTextParser.to_rgba
、MathTextParser.to_png
和 MathTextParser.get_depth
也已弃用。
要将文本字符串转换为图像,可以直接将文本绘制到空的 Figure
中,并使用紧密边界框保存图形,如 将文本转换为图像 中所示,或者使用 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
模块以前公开的以下 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
模块中的 MathtextBackendPdf
、MathtextBackendPs
、MathtextBackendSvg
和 MathtextBackendCairo
类,以及 RendererPdf
、RendererPS
、RendererSVG
和 RendererCairo
上对应的 .mathtext_parser
属性均已弃用。MathtextBackendPath
类可用于获取数学文本表达式中的字形和矩形列表,并且渲染器特有的逻辑应直接在渲染器中实现。
StandardPsFonts.pswriter
未使用且已弃用。
Widget 类内部实现#
几个 widgets.Widget
类内部实现已私有化并弃用:
AxesWidget.cids
Button.cnt
和Button.observers
CheckButtons.cnt
和CheckButtons.observers
RadioButtons.cnt
和RadioButtons.observers
Slider.cnt
和Slider.observers
TextBox.cnt
、TextBox.change_observers
和TextBox.submit_observers
渲染器上的 3D 属性#
绘制时放置在渲染器上的 3D Axes 属性现已弃用:
renderer.M
renderer.eye
renderer.vvec
renderer.get_axis_position
Collection3D
/Patch3D
的 do_3d_projection
方法的 renderer 参数#
Collection3D
和 Patch3D
上的 do_3d_projection
方法的 renderer 参数不再必需,在绘制时传递它已弃用。
Line3DCollection
的 draw
方法的 project 参数#
Line3DCollection
的 draw
方法的 project 参数已弃用。请改为显式调用 Line3DCollection.do_3d_projection
。
plot_surface
和 plot_wireframe
的额外位置参数#
除 X
、Y
和 Z
之外,传递给 plot_surface
和 plot_wireframe
的位置参数已弃用。请改为将额外的艺术家属性作为关键字参数传递。
ParasiteAxesAuxTransBase
类#
该混合类的功能已移至基类 ParasiteAxesBase
。因此,ParasiteAxesAuxTransBase
、ParasiteAxesAuxTrans
和 parasite_axes_auxtrans_class_factory
已弃用。
通常,建议使用 HostAxes.get_aux_axes
创建寄生 Axes,因为这省去了手动将寄生 Axes 附加到 host.parasites
的麻烦,并确保其 remove()
方法正常工作。
AxisArtist.ZORDER
属性#
请改用 AxisArtist.zorder
。
GridHelperBase
失效#
GridHelperBase.invalidate
、GridHelperBase.valid
和 axislines.Axes.invalidate_grid_helper
方法被视为内部方法并已弃用。
sphinext.plot_directive.align
#
……已弃用。请改用 docutils.parsers.rst.directives.images.Image.align
。
移除#
以下已弃用的 API 已移除
已移除的行为#
在
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.eventson
和matplotlib.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_bounds
和matplotlib.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()
已被移除。在处理FT2Image
之前,请先用np.asarray
将其转换为 NumPy 数组。matplotlib.quiver.QuiverKey.quiverkey_doc
已被移除;请改用matplotlib.quiver.QuiverKey.__init__.__doc__
。matplotlib.spines.Spine.set_smart_bounds
和matplotlib.spines.Spine.get_smart_bounds
已被移除。matplotlib.testing.jpl_units.UnitDbl.checkUnits
已被移除;请改用units not in self.allowed
。未使用的
matplotlib.ticker.Locator.autoscale
方法已被移除(请改为将轴限制传递给Locator.view_limits
)。派生方法Locator.autoscale
,AutoDateLocator.autoscale
,RRuleLocator.autoscale
,RadialLocator.autoscale
,ThetaLocator.autoscale
, 和YearLocator.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.destroy
和matplotlib.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.statusbar
,matplotlib.backends.backend_wx.NavigationToolbar2Wx.set_status_bar
, 和matplotlib.backends.backend_wx.NavigationToolbar2Wx.statbar
已被移除。可以通过调用标准 wx 方法(frame.GetStatusBar()
和toolbar.GetTopLevelParent().GetStatusBar()
)来获取状态栏。matplotlib.backends.backend_wx.ConfigureSubplotsWx.configure_subplots
和matplotlib.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_escapetext
和matplotlib.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_window
和matplotlib.mlab.stride_repeat
已被移除。matplotlib.rcsetup.update_savefig_format
已被移除;此功能仅将'auto'
替换为'png'
,因此请执行相同的操作。matplotlib.rcsetup.validate_animation_writer_path
已被移除。matplotlib.rcsetup.validate_path_exists
已被移除;请改用os.path.exists
或pathlib.Path.exists
。matplotlib.style.core.is_style_file
和matplotlib.style.core.iter_style_files
已被移除。matplotlib.testing.is_called_from_pytest
已被移除。mpl_toolkits.mplot3d.axes3d.unit_bbox
已被移除;请改用Bbox.unit
。
参数#
向
axes.Axes.axis
传递一个以上的位置参数现在将引发错误。不再支持向
Axes.boxplot
和cbook.boxplot_stats
的 whis 参数传递"range"
以表示“整个数据范围”。在
axes.Axes.fill_between
和axes.Axes.fill_betweenx
中不再接受向 where 参数传递标量,并且不匹配的大小现在会引发ValueError
。已移除
Axes.scatter
的 verts 参数;请改用 marker。Axis.set_ticks
和SecondaryAxis.set_ticks
中的 minor 参数现在仅接受关键字参数。如果向
scale.ScaleBase
,scale.LinearScale
和scale.SymmetricalLogScale
的构造函数传递任何意外的关键字参数,现在会引发错误。Figure.tight_layout
的 renderer 参数已被移除;此方法现在始终使用缓存到Figure
的渲染器实例。mpl_toolkits.axes_grid1.axes_grid.CbarAxesBase.colorbar
的 locator 参数已被移除,取而代之的是其同义词 ticks(该参数之前已存在,并与matplotlib.colorbar
保持一致)。matplotlib.test
的 switch_backend_warn 参数已不再生效并已被移除。各种
FigureCanvas*.print_*
方法的 dryrun 参数已被移除。
rcParams#
datapath
rcParam 已被移除。请改用matplotlib.get_data_path
。mpl_toolkits.legacy_colorbar
rcParam 已不再生效并已被移除。将
rcParams["boxplot.whiskers"]
(默认值:1.5
)设置为"range"
已不再有效;请改设为0, 100
。将
rcParams["savefig.format"]
(默认值:'png'
)设置为"auto"
已不再有效;请改用"png"
。将
rcParams["text.hinting"]
(默认值:'force_autohint'
)设置为False
或True
已不再有效;请分别将其设置为"auto"
或"none"
。
示例数据移除#
以下列出的示例数据集已被移除。括号中列出了用于演示的建议替代品。
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,最低支持版本正在提升
依赖项 |
mpl3.3中的最低版本 |
mpl3.4中的最低版本 |
---|---|---|
Python |
3.6 |
3.7 |
dateutil |
2.1 |
2.7 |
numpy |
1.15 |
1.16 |
pyparsing |
2.0.3 |
2.2.1 |
Qhull 在构建或 sdist 时下载#
与 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。