Matplotlib is hiring a Research Software Engineering Fellow! See discourse for details. Apply by January 3, 2020

Version 3.1.1
matplotlib
Fork me on GitHub

目录

Related Topics

API更改

影响面向外部的API的Matplotlib最新版本的更改日志。如果更新matplotlib会破坏脚本,那么这个列表可以帮助您找出导致破坏的原因,以及如何通过更新代码来修复它。有关旧版本中的API更改,请参阅 旧API更改 .

有关添加到matplotlib的新功能,请参见 Matplotlib 3.0.3的新功能 .

本页列出了Matplotlib最新版本的API更改。

注解

下面的列表是“next_api_changes”文件夹中各个文件的目录。当释放时

  • 对于次要版本和主要版本,应将下面的全文列表移到其自己的“prev-api-changes”文件中,在顶部添加用于bug修复版本的部分。
  • “next-api-changes”中的所有文件都应移动到此页底部
  • 这个注释和下面的目录树应该被注释掉。

3.0.3的API变更

matplotlib.font_manager.win32installedfonts返回值

matplotlib.font_manager.win32InstalledFonts 如果找不到字体,则返回空列表而不是无。

matplotlib.use现在有一个用于交互式后端的importError

通过以下方式切换后端 matplotlib.use 现在默认情况下是允许的,无论 matplotlib.pyplot 已导入。如果用户尝试从已启动的交互式后端切换到其他交互式后端,则会引发importError。

3.0.1的API变更

tight_layout.auto_adjust_subplotpars 可以返回 None 现在,如果新的子图参数将轴折叠为零宽度或高度。这防止 tight_layout 不会被执行。同样地 tight_layout.get_tight_layout_figure 将不返回。

3.0.0的API更改

支持python 2

Matplotlib3只支持python 3.5和更高版本。

后端加载更改

加载后端模块失败 (macosx 基于非框架构建和 gtk3 当无头运行时)现在上升 ImportError 而不是 RuntimeErrorTypeError ,分别)。

现在鼓励与交互框架集成的第三方后端定义 required_interactive_framework 全局值设置为以下值之一:“qt5”、“qt4”、“gtk3”、“wx”、“tk”或“macosx”。这些信息将用于确定是否可以从后端切换到另一个后端(具体来说,它们是否使用相同的交互框架)。

Axes.hist2d now uses pcolormesh instead of pcolorfast

Axes.hist2d 现在使用 pcolormesh 而不是 pcolorfast ,这将改进日志轴的处理。请注意,返回的 形象 现在是类型 QuadMesh 而不是 AxesImage .

matplotlib.axes.Axes.get_tightbbox 现在包括所有艺术家

对于Matplotlib 3.0, all 艺术家现在包含在由返回的边界框中 matplotlib.axes.Axes.get_tightbbox .

matplotlib.axes.Axes.get_tightbbox 添加新的Kwarg bbox_extra_artists 手动指定轴上要包含在紧边界框计算中的艺术家列表。

布局工具如 Figure.tight_layoutconstrained_layoutfig.savefig('fname.png', bbox_inches="tight") 使用 matplotlib.axes.Axes.get_tightbbox 确定图形上每个轴的边界并调整轴之间的间距。

在Matplotlib 2.2中 get_tightbbox 开始包括在轴上的传说,但仍然排除了其他一些艺术家,如文字,可能会超过轴。这已扩展到包括 all 艺术家。

此新默认值可以通过以下三种方式之一覆盖:

  1. 使艺术家被排除在图形的子对象之外,而不是轴。例如,呼叫 fig.legend() 而不是 ax.legend() (也许使用 get_legend_handles_labels 从父轴收集控制柄和标签)。
  2. 如果艺术家是轴的子级,请设置艺术家属性 artist.set_in_layout(False) .
  3. 手动指定新Kwarg中的艺术家列表 bbox_extra_artists .

Text.set_text 带字符串参数 None 将字符串设置为空

Text.set_text 当传递的字符串值为 None 将字符串设置为 "None" ,因此后续调用 Text.get_text 会返回含糊不清的 "None" 字符串。

此更改设置传递的文本对象 None 有空字符串,以便 Text.get_text 返回空字符串。

Axes3D.get_xlimget_ylimget_zlim 现在返回一个元组

他们以前返回了一个数组。返回元组与二维轴的行为一致。

font_manager.list_fonts 现在遵循平台的案例折叠语义

也就是说,它只在Windows上不敏感。

bar / barh 不再接受 left / bottom 作为第一个命名的参数

这些参数在2.0中重命名为 x / y 更改默认对齐方式后 edgecenter .

未记录选项的不同异常类型

  • 经过 style='comma'ticklabel_format() 从未得到支持。现在升起 ValueError 像所有其他不支持的样式一样,而不是 NotImplementedError .
  • 通过无证件 xminxmax 论据 set_xlim() 将静默覆盖 leftright 争论。 set_ylim() 以及3D等效物(例如 set_zlim3d() )有相应的问题。这个 _min_max 参数现在已被弃用,并且 TypeError 如果它们重写前面的限制参数,则将引发。

改进的呼叫签名 Axes.margins

matplotlib.axes.Axes.margins()mpl_toolkits.mplot3d.Axes3D.margins() 不再接受任意关键字。 TypeError 因此,如果通过未知的禁运,将被提起;以前,它们将被静默地忽略。

如果传递的位置参数太多, TypeError 将被提升而不是 ValueError ,以与其他呼叫签名冲突保持一致。

Axes3D.margins 现在提出 TypeError 如果只传递了两个位置参数,则不会发出拒绝警告。只提供 xy 页边距,使用关键字参数。

显式参数而不是 * ARGS, * * 关键字参数

PEP 3102 描述只包含关键字的参数,这些参数允许matplotlib提供显式调用签名-我们以前在这里使用过 *args, **kwargskwargs.pop ,我们现在可以公开命名参数。在某些地方,未知的禁运以前被忽略了,但现在上升了。 TypeError 因为 **kwargs 已删除。

  • matplotlib.axes.Axes.stem() 不再接受未知关键字,并引发 TypeError 而不是发出贬值。
  • matplotlib.axex.Axes.stem() 现在,在传递未处理的位置参数时引发类型错误。如果传递了两个或多个参数(即x,y, [林菲特] ,…)和y不能转换为数组,将引发错误,而不是将x视为y,y视为linefmt。
  • mpl_toolkits.axes_grid1.axes_divider.SubPlotDivider() 加薪 TypeError 而不是 Exception 当经过未知的关卡。

清理装饰器和测试类不再销毁退出时的警告筛选器

matplotlib.testing.decorators中的decorator和类不再破坏退出时的警告过滤器。相反,它们还原在测试开始之前存在的警告过滤器,使用 warnings.catch_warnings .

非交互式FigureManager类现在是FigureManagerBase的别名

这个 FigureManagerPdfFigureManagerPSFigureManagerSVG 类,以前是空的 FigureManagerBase (即,不添加或重写任何属性或方法)现在是的直接别名 FigureManagerBase .

更改为的输出 image.thumbnail

当与呼叫时 preview=Falseimage.thumbnail 之前返回了一个图形,其canvas类是根据输出文件扩展名设置的。它现在返回一个以画布类为基的图形 FigureCanvasBase (依赖于 FigureCanvasBase.print_figure )以正确处理画布切换)。

作为这一变化的副作用, image.thumbnail 现在还支持.ps、.eps和.svgz输出。

FuncAnimation 现在根据他们的Zorder绘制艺术家

FuncAnimation now draws artists returned by the user- function according to their zorder when using blitting, instead of using the order in which they are being passed. However, note that only zorder of passed artists will be respected, as they are drawn on top of any existing artists (see #11369) .

轮廓颜色自动缩放改进

现在,轮廓和轮廓的轮廓级别选择相同;以前,对于轮廓,删除了数据范围之外的级别。(例外:如果在数据范围内找不到等高线,则 levels 属性替换为仅包含数据范围最小值的列表。)

当使用指定为目标数字而不是列表的级别调用轮廓,并使用“扩展”Kwarg时,将选择级别,以便某些数据通常会落在扩展范围内。

当使用 LogNorm 或A LogLocator 现在,它将使用几何平均值而不是轮廓级别的算术平均值来选择颜色。

流图最后一行和最后一列固定

修复了一个错误,其中最后一行和最后一列数据位于 streamplot 正在被丢弃。

更改的默认值 AutoDateLocator 克瓦格 interval_multiplesTrue

日期刻度线定位器的默认值, dates.AutoDateLocator 克瓦格 interval_multiples 被设定为 False 在许多情况下,这会导致外观不好看的自动滴答声。好得多 interval_multiples=True 是新的默认值。请参阅下面的内容以恢复旧行为:

Axes.get_position 如果相位改变,现在返回实际位置

Axes.get_position 用于返回原始位置,除非已触发绘图或 Axes.apply_aspect 被召唤了,即使是Kwarg 起初的 被设定为 False . 现在 Axes.apply_aspect 叫做这样 ax.get_position() 将返回新的修改位置。要获得旧的行为,请使用 ax.get_position(original=True) .

颜色条的刻度现在根据颜色条的大小进行调整。

如果颜色条是由非轮廓或没有边界的可映射表生成的,或者未指定边界,则颜色条标记现在可根据颜色条的大小进行调整。如果指定了边界等,颜色栏将保持原始行为。

木尺六边形色条

使用时 hexbin 使用对数色标进行绘图时,颜色条刻度现在可以正确地进行对数缩放。以前,刻度值是线性刻度对数(计数数)。

PGF后端现在显式地将黑色文本变为黑色

以前使用pgf后端的行为是将文本指定为黑色,以实际成为呈现pgf文件的任何内容的默认颜色(当然,这通常是黑色的)。新的行为是,不管默认颜色是什么,黑色文本都是黑色的。但是,这意味着没有办法恢复渲染器的默认颜色。

黑名单中的RCPARAM不再由更新 rcdefaultsrc_file_defaultsrc_file

RC修饰符函数 rcdefaultsrc_file_defaultsrc_file 现在忽略 matplotlib.style.core.STYLE_BLACKLIST 集合。特别是,这可以防止 backendinteractive 这些函数不正确地修改了RCPARAM。

CallbackRegistry 现在使用stdlib存储回调 WeakMethod 的S

特别是,这意味着 CallbackRegistry.callbacks[signal] 现在是回调ID到的映射 WeakMethod s(即,首先调用它们时不需要参数来检索方法本身)。

有关text.latex.unicode rcparam的更改

rcparam现在默认为true,已弃用(即,在未来版本的maplotlib中,始终支持unicode输入)。

此外,底层实现现在使用 \usepackage[utf8]{{inputenc}} 而不是 \usepackage{{ucs}}\usepackage[utf8x]{{inputenc}} .

artistinspector.get_别名的返回类型已更改

ArtistInspector.get_aliases 以前返回的别名集为 {{fullname: {{alias1: None, alias2: None, ...}}}} . dict-to-none映射用于模拟早期版本的Python中的集合。它现在已经被一套替换了,即 {{fullname: {{alias1, alias2, ...}}}} .

此值也存储在 ArtistInspector.aliasd 也发生了同样的变化。

远离的 pytz 作为依赖

自从 dateutilpytz 两者都提供时区,Matplotlib已经依赖于 dateutil ,Matplotlib现在将使用 dateutil 内部时区,并放弃对 pytz . 同时 dateutil 时区是首选的(并且目前在python文档中推荐),明确使用 pytz 仍然支持区域。

贬抑

模块

以下模块已弃用:

  • matplotlib.compat.subprocess . 这是一个python 2解决方案,但是所有功能现在都可以在python 3标准库中找到。 subprocess .
  • matplotlib.backends.wx_compat . python 3只与wxpython 4兼容,因此可以放弃对wxpython 3或更早版本的支持。

类、方法、函数和属性

不推荐使用以下类、方法、函数和属性:

  • RcParams.msg_depr, RcParams.msg_depr_ignore, RcParams.msg_depr_set, RcParams.msg_obsolete, RcParams.msg_backend_obsolete
  • afm.parse_afm
  • backend_pdf.PdfFile.texFontMap
  • backend_pgf.get_texcommand
  • backend_ps.get_bbox
  • backend_qt5.FigureCanvasQT.keyAutoRepeat (直接检查) event.guiEvent.isAutoRepeat() 在事件处理程序中决定是否处理自动重复的按键)。
  • backend_qt5.error_msg_qt, backend_qt5.exception_handler
  • backend_wx.FigureCanvasWx.macros
  • backends.pylab_setup
  • cbook.GetRealpathAndStat, cbook.Locked
  • cbook.is_numlike (use isinstance(..., numbers.Number) instead), cbook.listFiles, cbook.unicode_safe
  • container.Container.set_remove_method,
  • contour.ContourLabeler.cl, .cl_xy, and .cl_cvalues
  • dates.DateFormatter.strftime_pre_1900, dates.DateFormatter.strftime
  • font_manager.TempCache
  • image._ImageBase.iterpnames 使用 interpolation_names 改为属性。(这会影响继承自 _ImageBase 包括 FigureImageBboxImageAxesImage
  • mathtext.unichr_safe (使用) chr 相反)
  • patches.Polygon.xy
  • table.Table.get_child_artists (使用) get_children 相反)
  • testing.compare.ImageComparisonTest, testing.compare.compare_float
  • testing.decorators.CleanupTest, testing.decorators.skip_if_command_unavailable
  • FigureCanvasQT.keyAutoRepeat (直接检查) event.guiEvent.isAutoRepeat() 在事件处理程序中决定是否处理自动重复的按键)
  • FigureCanvasWx.macros
  • _ImageBase.iterpnames 使用 interpolation_names 改为属性。(这会影响继承自 _ImageBase 包括 FigureImageBboxImageAxesImage
  • patches.Polygon.xy
  • texmanager.dvipng_hack_alpha
  • text.Annotation.arrow
  • Legend.draggable(), in favor of Legend.set_draggable()
    (Legend.draggable 在将来的版本中可能会作为属性重新引入)
  • textpath.TextToPath.tex_font_map
  • matplotlib.cbook.deprecation.mplDeprecation 将在将来的版本中删除。它只是一个别名 matplotlib.cbook.deprecation.MatplotlibDeprecationWarning . 请使用 MatplotlibDeprecationWarning 必要时直接。
  • 这个 matplotlib.cbook.Bunch 类已被弃用。相反,使用 types.SimpleNamespace 来自提供相同功能的标准库。
  • Axes.mouseover_set 现在是冻结集,已弃用。直接操纵艺术家的 .mouseover 属性来更改鼠标悬停状态。

以下关键字参数已弃用:

  • 经过 vertsAxes.scatter (使用) marker 相反)
  • 经过 obj_typecbook.deprecated

不推荐使用以下调用签名:

  • 通过A wx.EvtHandler 作为第一个论点 backend_wx.TimerWx

RCPARAMS

以下RCPARAM已弃用:

  • examples.directory (使用) datapath 相反)
  • pgf.debug (PGF后端依赖于日志记录)
  • text.latex.unicode (现在总是这样)

标记样式

  • 使用 (n, 3) 不推荐使用指定圆标记的标记样式。使用 "o" 相反。
  • 使用 ([(x0, y0), (x1, y1), ...], 0) 指定自定义标记路径的标记样式已被弃用。使用 [(x0, y0), (x1, y1), ...] 相反。

贬低 LocatableAxes 工具包中

这个 LocatableAxes 工具箱中的类已被弃用。底座 Axes 类为所有子类提供相同的功能,因此不再需要这些混合。相关函数也已弃用。明确地:

移除

保持机械

设置或取消设置 hold (deprecated in version 2.0 )现在已完全删除。Matplotlib现在总是表现得好像 hold=True . 要清除轴,可以手动使用 cla() 或清除整个图形使用 clf() .

删除不推荐使用的后端

已删除不推荐使用的后端:

  • GTKAgg
  • GTKCairo
  • GTK
  • GDK

不赞成的API

已删除以下已弃用的API元素:

  • 弃用的方法 knownfailureifremove_text 已从中删除 matplotlib.testing.decorators .
  • 的全部内容 testing.noseclasses 也被移除了。
  • matplotlib.checkdep_tex, matplotlib.checkdep_xmllint
  • backend_bases.IdleEvent
  • cbook.convertercbook.tostrcbook.todatetimecbook.todatecbook.tofloatcbook.tointcbook.uniquecbook.is_string_likecbook.is_sequence_of_stringscbook.is_scalarcbook.soundexcbook.dict_delallcbook.get_split_indcbook.wrapcbook.get_recursive_filelistcbook.piecescbook.exception_to_strcbook.allequalcbook.alltruecbook.onetruecbook.allpairscbook.finddircbook.reverse_dictcbook.restrict_dictcbook.issubclass_safecbook.recursive_removecbook.unmasked_index_rangescbook.Nullcbook.RingBuffercbook.Sortercbook.Xlator
  • font_manager.weight_as_number, font_manager.ttfdict_to_fnames
  • pyplot.colors, pyplot.spectral
  • rcsetup.validate_negative_linestylercsetup.validate_negative_linestyle_legacy
  • testing.compare.verifiers, testing.compare.verify
  • testing.decorators.knownfailureif, testing.decorators.ImageComparisonTest.remove_text
  • tests.assert_str_equal, tests.test_tinypages.file_same
  • texmanager.dvipng_hack_alpha,
  • _AxesBase.axesPatch, _AxesBase.set_color_cycle, _AxesBase.get_cursor_props, _AxesBase.set_cursor_props
  • _ImageBase.iterpnames
  • FigureCanvasBase.start_event_loop_default
  • FigureCanvasBase.stop_event_loop_default
  • Figure.figurePatch,
  • FigureCanvasBase.dynamic_update, FigureCanvasBase.idle_event, FigureCanvasBase.get_linestyle, FigureCanvasBase.set_linestyle
  • FigureCanvasQTAggBase
  • FigureCanvasQTAgg.blitbox
  • FigureCanvasTk.show (备选: FigureCanvasTk.draw
  • FigureManagerTkAgg (备选: FigureManagerTk
  • NavigationToolbar2TkAgg (备选: NavigationToolbar2Tk
  • backend_wxagg.Toolbar (备选: backend_wxagg.NavigationToolbar2WxAgg
  • RendererAgg.debug()
  • 将非数字传递给 EngFormatter.format_eng
  • 经过 fracPolarAxes.set_theta_grids
  • 提到空闲事件

已删除以下API元素:

  • backend_cairo.HAS_CAIRO_CFFI
  • sphinxext.sphinx_version

Sphinx 专有指令

Matplotlib文档使用了专有的sphinx指令 htmlonly:: latexonly:: . 这些已被标准斯芬克斯指令取代 only:: html only:: latex . 此更改不会影响任何用户。只有在文档中使用了专有指令的下游包维护人员才必须切换到sphinx指令。