API 变更 3.2.0#
行为变更#
rcParams["axes.formatter.limits"] 的默认值已减小 (默认值: [-5, 6])#
rcParams["axes.formatter.limits"] 的默认值已从 -7, 7 更改为 -5, 6 (默认值: [-5, 6]),以获得更好的可读性。
matplotlib.colorbar.Colorbar 对所有可映射对象使用未规范化的轴#
在 3.0 之前,matplotlib.colorbar.Colorbar (colorbar) 将所有轴限制在 0 到 1 之间进行规范化,并使用自定义刻度器来处理颜色条刻度的标签。在 3.0 之后,由 非 等高线的可映射对象构建的颜色条其轴的限制在可映射对象范数的 vmin 和 vmax 之间,并且刻度器成为正常轴刻度器的子级。
此版本的 Matplotlib 将此功能扩展到由等高线创建的可映射对象,并允许轴在等高线中的最低边界和最高边界之间运行。
以前为了解决 0 到 1 之间的规范化而编写的代码将需要修改。
MovieWriterRegistry#
MovieWriterRegistry 现在总是在返回写入器类之前检查其可用性。如果用户希望,例如,获取第一个可用的写入器,而无需对后续写入器执行可用性检查,现在可以迭代注册表,这将产生可用类的名称。
自动缩放#
Matplotlib 过去在每次绘图 (plot(), bar() 等) 调用后重新计算自动缩放限制。现在它只在实际渲染画布时,或用户查询 Axes 限制时才这样做。这对于包含大量艺术家对象的绘图来说是一个重要的性能改进。
特别是,这意味着使用 Axes.add_line、Axes.add_patch 等手动添加的艺术家对象将被自动缩放考虑在内,即使没有显式调用 Axes.autoscale_view。
在某些情况下,这可能导致报告的限制不同。如果这是一个问题,请考虑使用 fig.canvas.draw() 触发绘制。
基于 Collection 类的艺术家对象的自动缩放也已改变。以前,计算自动限制的方法 Collection.get_datalim 试图考虑集合中对象的大小,并使限制足够大以不剪切任何对象,即对于 Axes.scatter,它会使限制足够大以不剪切散点图中的任何标记。当对象大小以物理空间或图形相对空间指定时,这会产生问题,因为从物理单位到数据限制的转换需要知道数据限制,并且在新限制应用时变得无效。这是一个理论上可解决的逆问题(如果对象在物理上小于轴),但额外的复杂性不值得,特别是最常见的用例是散点图中的标记通常足够小以适应默认数据限制边距。
虽然新行为在算法上更简单,但它取决于 Collection 对象的属性。
offsets = None,transform是Axes.transData的子级:使用路径作为自动限制(即对于LineCollection在Axes.streamplot中)。offsets != None,且offset_transform是Axes.transData的子级transform是Axes.transData的子级:使用path + offset作为限制(即,对于Axes.bar)。transform不是Axes.transData的子级:仅使用偏移量作为限制(即用于散点图)。
否则返回一个空的
Bbox。
虽然这看起来很复杂,但逻辑很简单,就是使用数据空间中的对象信息作为限制,而不使用物理单位中的信息。
对数刻度 bar() / hist() 自动限制#
当坐标轴已经使用对数刻度时,bar 和 hist 中的自动限制计算已更改,以匹配在调用 bar 和 hist 之后将坐标轴切换到对数刻度时的计算,以及调用 bar(..., log=True) / hist(..., log=True) 时的计算:如果至少有两个不同的条形高度,则向其添加正常坐标轴边距(在对数刻度中);如果只有一个条形高度,则将其坐标轴限制围绕其扩展一个数量级,然后应用坐标轴边距。
跨多行/列的坐标轴标签#
Axes.label_outer 现在可以正确地保持跨越多行的 Axes 的 x 轴标签和刻度标签可见,只要它们覆盖 Axes 网格的最后一行。(这与保持跨越多列的 Axes 的 y 轴标签和刻度标签可见是一致的,只要它们覆盖 Axes 网格的第一列。)
Axes.is_last_row 和 Axes.is_last_col 方法现在对于跨越多行的 Axes,只要它们分别覆盖最后一行或最后一列,就正确返回 True。这与覆盖第一行或第一列的 Axes 的行为是一致的。
Axes.rowNum 和 Axes.colNum 属性已被弃用,因为它们仅指 Axes 覆盖的第一个网格单元格。取而代之,请使用新的 ax.get_subplotspec().rowspan 和 ax.get_subplotspec().colspan 属性,它们是 range 对象,表示子图覆盖的行和列的整个范围。
(请注意,此处提及的所有方法和属性实际上仅存在于 Axes 的 Subplot 子类上,该子类用于网格定位的 Axes,而不用于直接以绝对坐标定位的 Axes。)
GridSpec 类获得了 nrows 和 ncols 属性,作为 GridSpec.get_geometry 返回参数的更明确的同义词。
定位器#
当生成的刻度多于 Locator.MAXTICKS 时,Locator.raise_if_exceeds 的行为已从引发 RuntimeError 更改为发出 WARNING 级别的日志。
非奇异定位器#
Locator.nonsingular (在 mpl 3.1 中引入)、DateLocator.nonsingular 和 AutoDateLocator.nonsingular 现在返回范围 v0, v1,其中 v0 <= v1。此行为与 LogLocator 和 LogitLocator 子类实现 nonsingular 的行为一致。
get_data_ratio#
Axes.get_data_ratio 现在在计算 y 与 x 的比率之前会考虑轴的比例(线性、对数、logit 等)。此更改允许将固定纵横比应用于 x 和 y 比例的任何组合。
艺术家对象的“粘性边缘”#
以前,艺术家对象的 sticky_edges 属性是一个值列表,如果轴限制与“粘性边缘”重合,它将不会被轴边距扩展(这是例如防止图像周围添加边距的机制)。
sticky_edges 现在对边距应用有额外的影响:即使轴限制不与粘性边缘重合,它也不能通过边距应用跨越粘性边缘——相反,边距只会扩展轴限制,直到它碰到粘性边缘。
此更改改善了显示 streamplot 的轴的边距。
如果流线图一直延伸到矢量场的边缘,则轴限制将精确匹配矢量场限制(而以前有时会因小浮点误差而偏离)。
如果流线图未达到矢量场的边缘(例如,由于使用了
start_points和maxlength),则边距扩展将不再跨越矢量场限制。
此更改还在内部用于确保极坐标图不会显示负 r 值,除非用户确实传入负值。
svg 输出中的 gid#
以前,如果一个图形、坐标轴、图例或其他一些艺术家对象设置了自定义 gid(例如通过 .set_gid()),这不会反映在 SVG 输出中。取而代之的是显示默认的 gid,例如 figure_1。现在这个问题已得到修复,因此例如 fig.set_gid("myfigure") 在 SVG 文件中会正确显示为 <g id="myfigure">。如果您依赖于 gid 具有默认格式,则现在需要确保不设置艺术家对象的 gid 参数。
字体#
字体粗细猜测现在首先检查是否存在 FT_STYLE_BOLD_FLAG,然后再尝试匹配字体名称中的子字符串。特别是,这意味着 Times New Roman Bold 现在被正确检测为粗体,而不是普通粗细。
颜色相似度检查#
matplotlib.colors.is_color_like 过去对所有浮点数的字符串表示返回 True。然而,只有值在 0-1 之间的浮点数才是有效的颜色(表示灰度值)。is_color_like 现在对 0-1 之外的浮点数字符串表示返回 False。
默认图像插值#
Matplotlib 中显示的图像以前使用最近邻插值,这会导致降采样和非整数倍升采样的锯齿效应。
rcParams["image.interpolation"](默认值:'auto')的新默认值是新选项“antialiased”。imshow(A, interpolation='antialiased') 在重采样 A 中的数据显示(或保存到文件)时会应用 Hanning 滤波器,如果上采样率小于三倍且不是整数;下采样数据在重采样时总是被平滑。
要获得旧行为,请将 rcParams["image.interpolation"](默认值:'auto')设置为旧默认值“nearest”(或指定 Axes.imshow 的 interpolation 关键字参数)
要始终获得抗锯齿行为,无论上/下采样率如何,请将 rcParams["image.interpolation"](默认值:'auto')设置为“hanning”(或可用的其他滤镜之一)。
请注意,选择“hanning”滤镜是因为它仅带来适度的性能损失。抗锯齿效果可以通过其他滤镜得到改善。
rcParams#
当使用 RendererSVG 且 rcParams["svg.image_inline"] == True 时,外部写入的图像现在使用单个计数器,即使 renderer.basename 属性被覆盖,而不是每个 basename 一个计数器。
此更改仅在您使用 rcParams["svg.image_inline"] = True(默认值为 False)并且手动修改了 renderer.basename 时才会影响您。
rcParams["axes.formatter.limits"] 的默认值已从 -7, 7 更改为 -5, 6 (默认值: [-5, 6]),以获得更好的可读性。
add_subplot()#
Figure.add_subplot() 和 pyplot.subplot() 不再接受 figure 关键字参数。无论如何,它以前也只在传入的 figure 是 self 或当前 figure 时才有效。
indicate_inset()#
在 <= 3.1.0 中,indicate_inset 和 indicate_inset_zoom 被记录为返回一个 4 元组的 ConnectionPatch,而实际上它们返回的是一个长度为 4 的列表。
它们现在正确返回一个 4 元组。indicate_inset 以前在未提供可选参数 inset_ax 时会引发错误;现在它成功完成,并返回 None 而不是 ConnectionPatch 的元组。
PGF 后端#
pgf 后端的 get_canvas_width_height 现在返回画布大小的显示单位,而不是以前的英寸。鉴于 get_canvas_width_height 在代码库其余部分的使用情况,新行为是正确的。
如果 graphicx 的版本足够新以支持 interpolate 选项(这会自动检测),则 pgf 后端现在使用 \includegraphics 而不是 \pgfimage 来包含图像。
cbook#
cbook.warn_deprecated 的“obj_type”参数的默认值已从“attribute”(一个从未在内部使用的默认值)更改为空字符串。
测试#
测试套件不再默认开启 Python 故障处理程序。请设置标准的 PYTHONFAULTHANDLER 环境变量来执行此操作。
后端 supports_blit#
后端不再需要明确定义 supports_blit 标志。这仅与后端开发人员相关。后端过去必须定义 supports_blit 标志。现在不再需要,因为合成能力现在会自动检测。
异常变更#
以前对不正确类型输入引发 ValueError 的各种 API 现在改为引发 TypeError:backend_bases.GraphicsContextBase.set_clip_path、blocking_input.BlockingInput.__call__、matplotlib.cm.register_cmap、dviread.DviFont、rcsetup.validate_hatch、.rcsetup.validate_animation_writer_path、spines.Spine、matplotlib.transforms 模块和 matplotlib.tri 包中的许多类,以及接受 norm 参数的 Axes 方法。
如果将额外关键字参数传递给 LogScale,现在将引发 TypeError 而不是 ValueError。
mplot3d 自动注册#
mpl_toolkits.mplot3d 现在默认始终注册。不再需要导入 mplot3d 即可创建 3D 轴。
ax = fig.add_subplot(111, projection="3d")
SymLogNorm 现在有一个 base 参数#
以前,SymLogNorm 没有 base 关键字参数,并且 base 被硬编码为 base=np.e。这与 SymmetricalLogScale 的默认行为(默认值为 base=10)以及文档中“decade”一词的使用不一致。
为了将默认基数更改为 10,在不带新 base 关键字参数的情况下调用 SymLogNorm 会发出弃用警告。
弃用#
matplotlib.use#
matplotlib.use() 的 warn 参数已弃用(如果后端切换失败,请捕获发出的 ImportError 并根据需要重新发出警告)。
plotfile#
.pyplot.plotfile 已弃用,建议单独加载和绘制数据。请使用 pandas 或 NumPy 加载数据,并使用 pandas 或 matplotlib 绘制结果数据。
axes 和 axis#
将 Axis.major.locator、Axis.minor.locator、Axis.major.formatter 或 Axis.minor.formatter 设置为非 Locator 或 Formatter 子类的对象已被弃用。请注意,这些属性通常应使用 Axis.set_major_locator、Axis.set_minor_locator 等进行设置,这些方法在传入错误类的对象时已经会引发异常。
向 axis() 传递多个位置参数或不支持的关键字参数已被弃用(这些参数过去会被静默忽略)。
minor 参数将变为仅限关键字#
将 minor 参数作为位置参数传递给 get_*ticks() / set_*ticks() 已被弃用。它将在未来版本中成为仅限关键字的参数。
axes_grid1#
mpl_toolkits.axes_grid1.colorbar 模块及其颜色条实现已被弃用,取而代之的是 matplotlib.colorbar,因为前者基本上已被放弃,而后者是一个功能更丰富的替代品,具有几乎兼容的 API(例如,支持以下附加关键字:panchor、extendfrac、extendrect)。
主要区别在于
颜色条刻度的设置通过调用
colorbar.set_ticks完成,而不是colorbar.cbar_axis.set_xticks或colorbar.cbar_axis.set_yticks;colorbar()的locator参数已被弃用,取而代之的是其同义词ticks(此参数以前就已存在,并且与matplotlib.colorbar兼容)。颜色条的长轴根据方向使用
colorbar.xaxis或colorbar.yaxis访问,而不是colorbar.cbar_axis。默认的刻度器不再是
MaxNLocator(5),而是_ColorbarAutoLocator。不支持在单个 Axes 上叠加绘制多个颜色条(例如,当使用
ImageGrid元素的cax属性时);如果您之前依赖于第二个颜色条绘制在第一个颜色条之上,您可以在绘制第二个颜色条之前调用cax.cla()来清除轴。
在弃用期间,可以将 mpl_toolkits.legacy_colorbar rcParam 设置为 True,以在 mpl_toolkits.axes_grid1 代码中使用 mpl_toolkits.axes_grid1.colorbar 并发出弃用警告(默认),或者设置为 False 以使用 matplotlib.colorbar。
将 pad 大小(默认)设置为 None(即零的同义词)传递给 axes_grid1.axes_divider.AxesDivider 的 append_axes、new_horizontal 和 new_vertical 方法已弃用。在未来的版本中,None 的默认值将表示“使用 rcParams["figure.subplot.wspace"](默认:0.2)或 rcParams["figure.subplot.hspace"](默认:0.2)”(取决于方向)。请显式传递 pad=0 以保留旧行为。
Axes3D#
mplot3d.axis3d.get_flip_min_max 已弃用。
axes3d.unit_bbox 已弃用(请改用 Bbox.unit)。
axes3d.Axes3D.w_xaxis、.w_yaxis 和 .w_zaxis 已弃用(请改用 .xaxis、.yaxis 和 .zaxis)。
matplotlib.cm#
cm.revcmap 已弃用。使用 Colormap.reversed 反转颜色图。
cm.datad 不再包含“未转换”形式的反转颜色图条目。
axisartist#
mpl_toolkits.axisartist.grid_finder.GridFinderBase 已弃用(它唯一的用途是被 GridFinder 类继承,该类仅在构造函数中提供更多默认值并直接设置变换,因此 GridFinderBase 的方法已移至 GridFinder)。
axisartist.axis_artist.BezierPath 已弃用(使用 patches.PathPatch 绘制任意路径)。
AxisArtist.line 现在是 patches.PathPatch 实例,而不是 BezierPath 实例。
从 axisartist Locators(与“标准”刻度 Locators 不同)返回等于 None 的因子,或将等于 None 的因子传递给 axisartist Formatters(与“标准”刻度 Formatters 不同)已被弃用。请改传递等于 1 的因子。
对于 mpl_toolkits.axisartist.axis_artist.AttributeCopier 类,其构造函数和 set_ref_artist 方法,以及 get_attribute_from_ref_artist 的 default_value 参数已弃用。
构造函数被弃用意味着继承自 AttributeCopier 的类不应再调用其构造函数。
定位器#
未使用的 Locator.autoscale 方法已弃用(请改将轴限制传递给 Locator.view_limits)。
动画#
MovieWriterRegistry 类的以下方法和属性已弃用:set_dirty、ensure_not_dirty、reset_available_writers、avail。
smart_bounds()#
"smart_bounds" 功能已弃用。这包括 Axis.set_smart_bounds()、Axis.get_smart_bounds()、Spine.set_smart_bounds() 和 Spine.get_smart_bounds()。
boxplot()#
将 Axes.boxplot 和 cbook.boxplot_stats 的 whis 参数设置为“range”表示“整个数据范围”已弃用;将其设置为 (0, 100)(解释为百分位数)以达到相同的效果。
fill_between()#
在 fill_between() 和 fill_betweenx() 中向参数 where 传递标量已弃用。虽然文档已经说明 where 必须与 x(或 y)大小相同,但标量被接受并广播到 x 的大小。未来,不匹配的大小将引发 ValueError。
scatter()#
向 axes.Axes.scatter 传递 verts 参数已弃用;请改用 marker 参数。
tight_layout()#
Figure.tight_layout 的 renderer 参数已弃用;此方法现在始终使用缓存到 Figure 上的渲染器实例。
rcParams#
rcsetup.validate_animation_writer_path 函数已弃用。
将 rcParams["savefig.format"] (默认值: 'png') 设置为“auto”已弃用;请改用其同义词“png”。
将 rcParams["text.hinting"](默认值:'force_autohint')设置为 True 或 False 已弃用;请改用其同义词“auto”或“none”。
rcsetup.update_savefig_format 已弃用。
rcsetup.validate_path_exists 已弃用(请改用 os.path.exists 检查路径是否存在)。
rcsetup.ValidateInterval 已弃用。
日期#
dates.mx2num 已弃用。
TK#
NavigationToolbar2Tk.set_active 已弃用,因为它没有(可观察到的)效果。
WX#
FigureFrameWx.statusbar 和 NavigationToolbar2Wx.statbar 已弃用。状态栏可以通过调用标准 wx 方法 (frame.GetStatusBar() 和 toolbar.GetTopLevelParent().GetStatusBar()) 获取。
backend_wx.ConfigureSubplotsWx.configure_subplots 和 backend_wx.ConfigureSubplotsWx.get_canvas 已弃用。
PGF#
backend_pgf.repl_escapetext 和 backend_pgf.repl_mathdefault 已弃用。
RendererPgf.latexManager 已弃用。
FigureCanvas#
FigureCanvasBase.draw_cursor (它从未执行任何操作,也从未在任何后端被覆盖) 已弃用。
FigureCanvasMac.invalidate 已弃用,取而代之的是其同义词 FigureCanvasMac.draw_idle。
各种 FigureCanvasFoo.print_foo 方法的 dryrun 参数已弃用。
QuiverKey 文档#
quiver.QuiverKey.quiverkey_doc 已弃用;请改用 quiver.QuiverKey.__init__.__doc__。
matplotlib.mlab#
mlab.apply_window 和 mlab.stride_repeat 已弃用。
字体#
font_manager.JSONEncoder 已弃用。请使用 font_manager.json_dump 转储 FontManager 实例。
font_manager.createFontList 已弃用。font_manager.FontManager.addfont 现在可用于在给定路径注册字体。
matplotlib.ft2font.FT2Image 的 as_str, as_rgba_str, as_array, get_width 和 get_height 方法已弃用。在处理 FT2Image 之前,请使用 np.asarray 将其转换为 NumPy 数组。
颜色#
函数 matplotlib.colors.makeMappingArray 不再被视为公共 API 的一部分。因此,它已被弃用。
使用单字符颜色字符串作为颜色序列(例如“rgb”)已弃用。请改用显式列表。
刻度#
向 ScaleBase 及其子类 LinearScale 和 SymmetricalLogScale 传递不支持的关键字参数已被弃用,并将在 3.3 版本中引发 TypeError。
如果向 LogScale 传递了额外的关键字参数,现在将引发 TypeError 而不是 ValueError。
测试#
matplotlib.testing.disable_internet 模块已弃用。请改用(例如)pytest-remotedata。
matplotlib.testing 对基于 nose 的测试的支持已弃用(如果在使用该模块的装饰器时满足以下两个条件:1) matplotlib 的 conftest 未被调用,且 2) nose 在 sys.modules 中,则会发出弃用警告)。
testing.is_called_from_pytest 已弃用。
在弃用期间,要强制生成基于 nose 的测试,请先导入 nose。
matplotlib.test 的 switch_backend_warn 参数没有效果,并且已被弃用。
testing.jpl_units.UnitDbl.UnitDbl.checkUnits 已弃用。
DivergingNorm 更名为 TwoSlopeNorm#
DivergingNorm 是一个误导性的名称;尽管该范数是为了与发散颜色图一起使用而开发的,但“发散”一词并未描述或唤起该范数的映射函数。由于该函数是单调、连续且分段线性的,具有两个分段,因此该范数已更名为 TwoSlopeNorm。
杂项#
matplotlib.get_home 已弃用(请改用例如 os.path.expanduser("~"))。
matplotlib.compare_versions 已弃用(请改用 distutils.version.LooseVersion 的比较)。
matplotlib.checkdep_ps_distiller 已弃用。
matplotlib.figure.AxesStack 被视为私有 API,并将在未来版本中从公共 API 中移除。
BboxBase.is_unit 已弃用(如果需要,请检查 Bbox 范围)。
Affine2DBase.matrix_from_values(...) 已弃用。请改用(例如)Affine2D.from_values(...).get_matrix()。
style.core.is_style_file 和 style.core.iter_style_files 已弃用。
datapath rcParam#
请改用 get_data_path。(此 rcParam 已弃用,因为它无法被最终用户有意义地设置。)此 rcParam 从 3.2.0 起没有效果,但仅在 3.2.1 中弃用。在 3.2.1 及更高版本中,如果在 matplotlibrc 文件中设置了 'datapath',它将被尊重,但此行为将在 3.3 中移除。
移除#
matplotlib.testing.determinism 模块已删除,该模块不公开任何公共 API。
以下 API 元素已被移除
backend_gtk3.PIXELS_PER_INCHbackend_pgf.re_escapetext,backend_pgf.re_mathdefault。matplotlib.backends.tkagg,matplotlib.backends.windowing,matplotlib.backends.wx_compat和matplotlib.compat.subprocess模块RcParams.msg_depr,RcParams.msg_depr_ignore,RcParams.msg_depr_set,RcParams.msg_obsolete,RcParams.msg_backend_obsoleteafm.parse_afm(改用afm.AFM)axes.Axes.mouseover_setbackend_cairo.ArrayWrapper,backend_cairo.RendererCairo.convert_pathbackend_gtk3.FileChooserDialog.sorted_filetypes(改用sorted(self.filetypes.items()))backend_pgf.get_texcommandbackend_pdf.PdfFile.texFontMapbackend_ps.get_bboxbackend_qt.FigureCanvasQt.keyAutoRepeat(改用event.guiEvent.isAutoRepeat),backend_qt.error_msg_qt,backend_qt.exception_handlerbackend_wx.FigureCanvasWx.macrosbackends.pylab_setupcbook.Bunch(改用types.SimpleNamespace),cbook.Locked,cbook.unicode_safe,cbook.is_numlike(改用isinstance(..., numbers.Number)),cbook.mkdirs(改用os.makedirs(..., exist_ok=True)),cbook.GetRealpathAndStat(改用cbook.get_realpath_and_stat),cbook.listFilescontainer.Container.set_remove_methodcontour.ContourLabeler.cl,contour.ContourLabeler.cl_xy,contour.ContourLabeler.cl_cvalues(改用labelTexts,labelXYs,labelCValues)dates.DateFormatter.strftime,dates.DateFormatter.strftime_pre_1900font_manager.TempCache,font_manager.FontManager.ttffiles,font_manager.FontManager.afmfilesmathtext.unichr_safe(改用chr)patches.YAArrow(改用patches.FancyArrowPatch)sphinxext.plot_directive.remove_codingtable.Table.get_child_artiststesting.compare.compare_float,testing.decorators.CleanupTest,testing.decorators.ImageComparisonTest,testing.decorators.skip_if_command_unavailable, 对基于 nose 的测试的支持text.Annotation.arrow(改用text.Annotation.arrow_patch)textpath.TextToPath.tex_font_mapticker.Base,ticker.closeto,ticker.nearest_longaxes_grid1.axes_divider.LocatableAxesBase,axes_grid1.axes_divider.locatable_axes_factory,axes_grid1.axes_divider.Axes(改用axes_grid1.mpl_axes.Axes),axes_grid1.axes_divider.LocatableAxes(改用axes_grid1.mpl_axes.Axes)axisartist.axes_divider.Axes,axisartist.axes_divider.LocatableAxes(改用axisartist.axislines.Axes)hist的 normed 关键字参数 (改用 density)在指定标记时传递
(verts, 0)或(..., 3)以分别指定路径或圆形 (改为分别使用verts或"o")examples.directoryrcParam
matplotlib.backends.backend_pdf.PdfFile 的以下成员已移除
nextObjectnextFontnextAlphaStatenextHatchnextImagealphaStateObject
Matplotlib 3.0 中引入的后端模块的 required_interactive_framework 属性已移至 FigureCanvas 类,以便第三方画布子类可以继承它,并更容易了解画布类需要哪种交互式框架。
backend_qt4.FigureCanvasQT5(它是 backend_qt5.FigureCanvasQT 的别名,但仅以该名称存在于 backend_qt4 中)已移除。
开发变更#
Windows 构建#
此前,在构建 matplotlib._png 扩展时,构建脚本会将 "png" 和 "z" 添加到扩展的 .libraries 属性中(如果 pkg-config 信息不可用,尤其是在 Windows 上)。
尤其地,这意味着 Windows 构建会查找名为 png.lib 和 z.lib 的文件;但 libpng 上游和 zlib 上游默认都不提供这些文件。(在 Linux 上,这将查找 libpng.so 和 libz.so,这些确实是标准名称。)
取而代之的是,在 Windows 上,我们现在查找 libpng16.lib 和 zlib.lib,这些是共享库的上游名称(截至 libpng 1.6.x)。
对于静态链接构建,上游名称是 libpng16_static.lib 和 zlibstatic.lib;如果需要此类构建,仍然需要手动重命名它们。
打包 DLLs#
此前,可以通过将 Windows DLLs 复制到源代码树中并在 setup.cfg 中设置 package_data.dlls 条目,从而将它们打包到 Matplotlib wheel(或 sdist)中。
现在,复制到源代码树中的 DLLs 始终会被打包;package_data.dlls 条目不再有任何作用。如果您不希望包含 DLLs,请不要将它们复制到源代码树中。