2.1.0中的API变更

日志刻度的默认行为更改为mask<=0值

调用 matplotlib.axes.Axes.set_xscalematplotlib.axes.Axes.set_yscale 现在使用“mask”作为默认方法来处理无效值(而不是“clip”)。这意味着对数刻度上的任何值<=0都不会显示。

以前,它们被裁剪成一个非常小的数字并显示出来。

matplotlib.cbook.CallbackRegistry.process() 默认情况下禁止例外

Matplotlib使用的实例 CallbackRegistry 作为用户输入事件与用户回调之间的桥梁。以前,在用户回调中引发的任何异常都将冒泡出 process 方法,通常在GUI事件循环中。大多数GUI框架都简单地将跟踪打印到屏幕上并继续,因为不总是有一种将异常返回给用户的清晰方法。但是,当pyqt5在事件循环中接收到未处理的python异常时,它现在退出进程。因此, process() 现在,默认情况下取消并打印到stderr的回溯。

什么 process() 现在用户可以通过 exception_handler 属性和Kwarg。恢复上一个行为过程 None ::

cb = CallbackRegistry(exception_handler=None)

一个函数 Exception 因为它唯一的参数也可以传递:

def maybe_reraise(exc):
    if isinstance(exc, RuntimeError):
        pass
    else:
        raise exc

cb = CallbackRegistry(exception_handler=maybe_reraise)

改进了轴网格的切换

这个 g 键绑定现在切换 xy 独立网格(通过循环所有四个开/关组合)。

新的 G 键绑定切换次要网格的状态。

如果只有网格线的一个子集(在任一方向)可见,则禁用这两个绑定,以避免对图形进行不可逆的更改。

滴答标签已关闭,而不是不可见

在内部, Tick~matplotlib.axis.Tick.label1On 属性现在用于隐藏刻度标签,而不是设置刻度标签对象的可见性。这提高了整体性能并解决了一些问题。因此,如果需要显示这些标签, tick_params() 需要使用,例如

ax.tick_params(labelbottom=True)

删除空图例上的警告

pyplot.legend 用于在找不到带标签的艺术家时发出警告。此警告已被删除。

更精确的图例自动定位

现在,图例的自动定位更倾向于使用由 Line2D 而不是将图例放在线条本身上。

库存样本数据清理

对库存的样本数据进行了清理,以消除冗余,提高可移植性。这个 AAPL.dat.gzINTC.dat.gzaapl.csv 文件已完全删除,也将不再从 matplotlib.cbook.get_sample_data . 如果需要csv文件,我们建议使用 msft.csv 这将继续在示例数据中提供。如果可以接受numpy二进制文件,我们建议使用以下两个新文件之一。这个 aapl.npy.gzgoog.npy 文件已被替换为 aapl.npzgoog.npz ,其中第一列的类型已从 datetime.datenumpy.datetime64 为了更好地跨Python版本进行移植。注意matplotlib不能完全支持 numpy.datetime64 到目前为止。

更新至2015年2月

Matplotlib附带的用于Delaunay三角测量的Qhull版本已从2012.1版更新到2015.2版。

改进的大偏移Delaunay三角测量

Delaunay三角测量现在以更好的方式处理较大的X,Y偏移。这可能导致使用matplotlib计算的任何三角测量发生微小变化,即使用 matplotlib.tri.Triangulation 这要求计算Delaunay三角测量,其中包括 matplotlib.pyplot.tricontourmatplotlib.pyplot.tricontourfmatplotlib.pyplot.tripcolormatplotlib.pyplot.triplotmatplotlib.mlab.griddatampl_toolkits.mplot3d.axes3d.Axes3D.plot_trisurf .

使用 backports.functools_lru_cache 而不是 functools32

它得到更好的维护和更广泛的使用(由皮林特,雅拉科等)。

cbook.is_numlike 只执行实例检查

matplotlib.cbook.is_numlike 现在只检查其参数是否是 (numbers.Number, np.Number) . 特别是,这意味着数组现在不是num-like。

椭圆弧现在在正确的角度之间绘制

这个 matplotlib.patches.Arc 补丁现在正确绘制在给定的角度之间。

以前画了一条圆弧,然后拉伸成椭圆,因此所得的圆弧不在 THEA1TaTa2 .

-d$backend 不再设置后端

不能再通过传递来设置后端 -d$backend 在命令行。使用 MPLBACKEND 而是环境变量。

path.intersects_bbox始终将边界框视为已填充

以前,什么时候 Path.intersects_bbox 被召唤 filled 设置为 False 将路径和边界框都视为未填充。由于边界框用于表示边界框内更复杂的形状,因此这种行为没有很好的文档记录,而且通常不是所需的行为。此行为现在已更改:何时 filledFalse ,路径将被视为未填充,但边界框仍被视为已填充。旧的行为可以说是一个实现错误。

什么时候? Path.intersects_bbox 被调用 filled 设置为 True (默认值),行为没有变化。对于那些罕见的案例 Path.intersects_bbox 被召唤 filled 设置为 False 在实际需要旧行为的地方,建议的解决方法是调用 Path.intersects_path 以矩形作为路径::

from matplotlib.path import Path
from matplotlib.transforms import Bbox, BboxTransformTo
rect = Path.unit_rectangle().transformed(BboxTransformTo(bbox))
result = path.intersects_path(rect, filled=False)

WX不再调用生成 IdleEvent 事件或呼叫 idle_event

已删除未使用的私有方法 _onIdleFigureCanvasWx .

这个 IdleEvent 类和 FigureCanvasBase.idle_event 方法将在2.2中删除。

正确缩放 magnitude_spectrum()

功能 matplotlib.mlab.magnitude_spectrum()matplotlib.pyplot.magnitude_spectrum() 隐式假定窗口函数值的和为1。在Matplotlib和Numpy中,标准窗口函数被缩放为最大值1,这通常会导致n点信号的n/2阶之和。因此振幅标度 magnitude_spectrum() 在使用标准窗口功能时关闭了该数量 (Bug 8417 )现在的行为与 matplotlib.pyplot.psd()scipy.signal.welch() . 下面的示例演示新的和旧的缩放:

import matplotlib.pyplot as plt
import numpy as np

tau, n = 10, 1024  # 10 second signal with 1024 points
T = tau/n  # sampling interval
t = np.arange(n)*T

a = 4  # amplitude
x = a*np.sin(40*np.pi*t)  # 20 Hz sine with amplitude a

# New correct behavior: Amplitude at 20 Hz is a/2
plt.magnitude_spectrum(x, Fs=1/T, sides='onesided', scale='linear')

# Original behavior: Amplitude at 20 Hz is (a/2)*(n/2) for a Hanning window
w = np.hanning(n)  # default window is a Hanning window
plt.magnitude_spectrum(x*np.sum(w), Fs=1/T, sides='onesided', scale='linear')

更改为的签名 bar() & barh()

2岁 default value of *align* 改为 'center' . 但是这导致了 bar()barh() 因为第一个参数仍然是 left底部 分别:

bar(left, height, *, align='center', **kwargs)
barh(bottom, width, *, align='center', **kwargs)

尽管在这两种情况下都是中心人物。现在的方法 *args, **kwargs 作为输入并记录有以下主要签名:

bar(x, height, *, align='center', **kwargs)
barh(y, width, *, align='center', **kwargs)

经过 left底部 作为关键字参数 bar()barh() 分别发出警告。支架将在Matplotlib 3.0中拆除。

字体缓存为JSON

字体缓存现在保存为json,而不是pickle。

无效(非有限)轴限制错误

使用时 set_xlim()set_ylim() ,传递非有限值现在会导致 ValueError . 先前的行为导致限值错误地重置为 (-0.001, 0.001) .

scatterCollection 偏移不再隐式展平

Collection (因此2维 scatter 三维 scatter )不再隐式展平其偏移。因此, scatterxy 参数不能再是2+维度数组。

贬抑

GraphicsContextBaselinestyle 财产。

这个 GraphicsContextBase.get_linestyleGraphicsContextBase.set_linestyle 方法没有任何效果,已被弃用。所有后端Matplotlib船使用 GraphicsContextBase.get_dashesGraphicsContextBase.set_dashes 这是更一般的。第三方后端也应迁移到 *_dashes 方法。

测试

matplotlib.testing.noseclasses 已弃用,将在2.3中删除

EngFormatter num 作为字符串的ARG

将字符串作为 num 调用的实例时的参数 matplotlib.ticker.EngFormatter 已弃用,将在2.3中删除。

mpl_toolkits.axes_grid 模块

所有功能来自 mpl_toolkits.axes_grid 可以在任何一个 mpl_toolkits.axes_grid1mpl_toolkits.axisartist . 轴类来自 mpl_toolkits.axes_grid 基于 Axismpl_toolkits.axisartist 可以在 mpl_toolkits.axisartist .

Axes collision in Figure.add_axes

通过使用与前一个轴实例相同的参数将轴实例添加到图中,当前会重用前一个实例。Matplotlib 2.1中已弃用此行为。在未来的版本中, new 将始终创建并返回实例。同时,在这种情况下,将通过以下方式提出一个弃用警告: AxesStack .

通过传递一个 独特的 每个轴实例的标签。查看文档字符串 add_axes() 更多信息。

有关此折旧背后的理由的其他详细信息,请参见 #7377#9024 .

前验证器 contour.negative_linestyle

前公共验证功能 validate_negative_linestylevalidate_negative_linestyle_legacy 将在2.1中弃用,并可在2.3中删除。没有公共功能来取代它们。

cbook

许多未使用或接近未使用 matplotlib.cbook 函数和类已被弃用: convertertostrtodatetimetodatetofloattointuniqueis_string_likeis_sequence_of_stringsis_scalarSorterXlatorsoundexNulldict_delallRingBufferget_split_indwrapget_recursive_filelistpiecesexception_to_strallequalalltrueonetrueallpairsfinddirreverse_dictrestrict_dictissubclass_saferecursive_removeunmasked_index_ranges .

代码删除

qt4_compat.py

搬到 qt_compat.py . 重命名,因为它现在也处理qt5。

以前弃用的方法

这个 GraphicsContextBase.set_graylevelFigureCanvasBase.onHilitempl_toolkits.axes_grid1.mpl_axes.Axes.toggle_axisline 方法已被删除。

这个 ArtistInspector.findobj 方法,由于缺少 get_children 方法,已被移除。

被蔑视的 point_in_pathget_path_extentspoint_in_path_collectionpath_intersects_pathconvert_path_to_polygonscleanup_pathclip_path_to_rect 中的函数 matplotlib.path 模块已移除。它们的功能在 Path 班级。

被蔑视的 Artist.get_axesArtist.set_axes 方法已被删除

这个 matplotlib.backends.backend_ps.seq_allequal 函数已被删除。使用 np.array_equal 相反。

被蔑视的 matplotlib.rcsetup.validate_maskedarraymatplotlib.rcsetup.deprecate_savefig_extensionmatplotlib.rcsetup.validate_tkpythoninspect 功能和关联 savefig.extensiontk.pythoninspect 已删除RCPARMS条目。

关键字参数 分辨率 属于 matplotlib.projections.polar.PolarAxes 已删除。它具有贬低作用,不受版本影响 0.98.x .

Axes.set_aspect("normal")

支持设置 Axes 方面 "normal" 已删除,以支持同义词 "auto" .

shading kwarg to pcolor

这个 shading 克瓦格 pcolor 已删除。集合 edgecolors 适当地代替。

从中删除的函数 lines 模块

这个 matplotlib.lines 模块不再导入 pts_to_presteppts_to_midsteppts_to_poststep 功能从 matplotlib.cbook .

PDF后端功能

方法 embedTeXFonttex_font_mapping 属于 matplotlib.backends.backend_pdf.PdfFile 已被删除。外部用户不太可能调用这些方法,这些方法与PDF后端内部的字体系统相关。

matplotlib.delaunay

删除现在由qhull via处理的Delaunay三角测量代码 matplotlib.tri .