1.4.x 中的 API 变更#
代码更改#
对axes模块进行了重大重构。axes模块已被拆分为更小的模块:
_base模块,其中包含一个新的私有_AxesBase类。此类包含除绘图和标签方法之外的所有方法。_subplot模块,包含所有与子图相关的类。
在
axes模块的命名空间中,有一些东西已经不存在了。如果你使用它们,你需要从它们原来的位置导入:math->import mathma->from numpy import macbook->from matplotlib import cbookdocstring->from matplotlib import docstringis_sequence_of_strings->from matplotlib.cbook import is_sequence_of_stringsis_string_like->from matplotlib.cbook import is_string_likeiterable->from matplotlib.cbook import iterableitertools->import itertoolsmartist->from matplotlib import artist as martistmatplotlib->import matplotlibmcoll->from matplotlib import collections as mcollmcolors->from matplotlib import colors as mcolorsmcontour->from matplotlib import contour as mcontourmpatches->from matplotlib import patches as mpatchesmpath->from matplotlib import path as mpathmquiver->from matplotlib import quiver as mquivermstack->from matplotlib import stack as mstackmstream->from matplotlib import stream as mstreammtable->from matplotlib import table as mtable
作为支持 Qt5 重构的一部分,模块
matplotlib.backends.qt4_compat被重命名为matplotlib.backends.qt_compat。qt4_compat在 1.4 版本中已被弃用,并将在 1.5 版本中移除。The
errorbar()方法已经更改,使得上下限(lolims、uplims、xlolims、xuplims)现在指向正确的方向。对于
errorbar()的 fmt 关键字参数,现在支持字符串 'none' 来抑制线条和标记的绘制;使用 None 对象进行此操作已被弃用。默认的 fmt 值已更改为空字符串 (''),因此线条和标记由plot()的默认值控制。在字体路径效果渲染中修复了一个错误,这意味着现在字体大小与非路径效果字体一致。更多详情请参见 matplotlib/matplotlib#2889。
Sphinx 扩展
ipython_directive和ipython_console_highlighting已经移至 IPython 项目本身。虽然它们在此版本中仍保留在 Matplotlib 中,但已被弃用。请更新conf.py中的扩展,使其指向IPython.sphinxext.ipython_directive而不是matplotlib.sphinxext.ipython_directive。在
matplotlib.finance中,几乎所有函数都已被弃用,并替换为一对名为*_ochl和*_ohlc的函数。前者是本模块之前使用的 '开盘-收盘-最高-最低' 报价顺序,而后者是金融领域标准的 '开盘-最高-最低-收盘' 顺序。为了保持一致性,
matplotlib.patheffects.SimplePatchShadow中的face_alpha关键字已被弃用,取而代之的是alpha关键字。同样,所有AbstractPathEffect中的offset_xy关键字现在被命名为offset。matplotlib.patheffects._Base已重命名为matplotlib.patheffects.AbstractPathEffect。matplotlib.patheffect.ProxyRenderer已重命名为matplotlib.patheffects.PathEffectRenderer,并且现在是一个完整的 RendererBase 子类。绘制
Figure.colorbar轮廓的艺术家已从matplotlib.lines.Line2D更改为matplotlib.patches.Polygon,因此colorbar.ColorbarBase.outline现在是一个matplotlib.patches.Polygon对象。图例处理接口已从可调用对象更改为实现
legend_artists方法的任何对象(在 v1.4 的弃用阶段将维护此接口)。有关更多详细信息,请参阅 图例指南。进一步的图例更改包括:matplotlib.axes.Axes._get_legend_handles现在返回一个句柄生成器,而不是一个列表。函数
legend()的 loc 位置参数已被弃用。请改用 loc 关键字参数。
已添加
rcParams["savefig.transparent"](default:False) 以控制保存图形时的默认透明度。稍微重构了
Annotation家族。Annotation中的文本位置现在完全由底层的Text对象处理,因此.set_position按预期工作。属性 xytext 和 textcoords 已被弃用,取而代之的是 xyann 和 anncoords,以便Annotation和AnnotationBbox可以共享一个用于获取/设置文本或框位置的通用且合理命名的 API。xyann -> 设置注释的位置
xy -> 设置箭头指向的位置
anncoords -> 设置注释位置的单位
xycoords -> 设置点位置的单位
set_position()->Annotation仅设置注释的位置
matplotlib.mlab.specgram,matplotlib.mlab.psd,matplotlib.mlab.csd,matplotlib.mlab.cohere,matplotlib.mlab.cohere_pairs,matplotlib.pyplot.specgram,matplotlib.pyplot.psd,matplotlib.pyplot.csd, 和matplotlib.pyplot.cohere现在在之前引发 AssertionError 的地方引发 ValueError。对于
matplotlib.mlab.psd、matplotlib.mlab.csd、matplotlib.mlab.cohere、matplotlib.mlab.cohere_pairs、matplotlib.pyplot.specgram、matplotlib.pyplot.psd、matplotlib.pyplot.csd和matplotlib.pyplot.cohere,在返回形状为 (n, 1) 数组的情况下,现在将其转换为 (n, ) 数组。以前,(n, m) 数组被平均为 (n, ) 数组,但 (n, 1) 数组保持不变。此更改使得两种情况下的维度一致。添加了
rcParams["axes.formatter.useoffset"](default:True) 以控制ticker.ScalarFormatter中 useOffset 的默认值。添加了
Formatter子类StrMethodFormatter,它与FormatStrFormatter做同样的事情,但适用于新样式的格式化字符串。已弃用
matplotlib.testing.image_util及其唯一函数matplotlib.testing.image_util.autocontrast。这些将在 v1.5.0 中完全移除。在
plot_date()方法中的fmt参数已从bo更改为o,因此默认情况下可以进行颜色循环。移除了类
FigureManagerQTAgg并弃用了NavigationToolbar2QTAgg,后者将在1.5版本中移除。从
FigureCanvasQTAgg中移除了以前公开的(非前缀的)属性rect和drawRect;它们始终是(保留的)drawRectangle()函数的实现细节。matplotlib.tight_bbox.adjust_bbox和matplotlib.tight_bbox.process_figure_for_rasterizing的函数签名已更改。新增的 fixed_dpi 参数允许覆盖figure.dpi设置,而不是从文件格式推断预期行为。为
mpl_toolkits.axes_grid1.axes_grid.ImageGrid添加了对水平/垂直轴填充的支持 --- 如果需要单独的轴填充,参数 axes_pad 现在可以是类似元组的形式。原始行为保持不变。为
matplotlib.transforms.Affine2D添加了对倾斜变换的支持,可以使用skew和skew_deg方法创建。在
axes.Axes.pie中添加了顺时针参数以控制扇区方向在
matplotlib.lines.Line2D中,markevery 功能得到了扩展。以前可以通过使用两元素列表或两元素元组来指定整数起始索引和步长。现在这只能通过使用两元素元组来完成。如果使用了两元素列表,那么它将被视为 NumPy 花式索引,并且只会显示与给定索引对应的两个标记。从
mpl_toolkits.axes_grid1.anchored_artists.AnchoredSizeBar调用中移除了 prop 关键字参数。它被传递给基类的__init__并且仅用于设置填充。现在 fontproperties*(这是真正用于设置 `.AnchoredSizeBar` 字体属性的参数)被传递来代替 *prop。如果未传递 fontproperties,但传递了 prop,则 prop 被用于代替 fontproperties。如果两者都被传递,prop 将被静默忽略。在
pyplot.subplot及相关命令中使用索引 0 已被弃用。由于缺乏验证,调用plt.subplots(2, 2, 0)不会引发异常,但会将坐标轴放置在 _最后一个_ 位置。这是因为子图的索引是基于 1 的(以镜像 MATLAB),因此在索引到用于确定坐标轴位置的GridSpec对象之前,会减去 1。传入 0 会导致向GridSpec传递 -1,从而返回最后一个位置。尽管这种行为显然是错误的且非预期的,但我们出于谨慎考虑,正在进行一个弃用周期,以确保没有任何用户在利用这个 '特性'。在 1.4 版本中,使用 0 作为索引将引发警告,而在 1.5 版本中将引发异常。现在,偏移框的裁剪默认关闭。
Matplotlib 现在在关闭图形时使用了一个不那么激进的
gc.collect(1)调用,以避免在内存中有大量用户对象时出现主要延迟。现在,*所有*饼图艺术家的默认剪切值默认为
False。
代码移除#
移除了
mlab.levypdf。该代码引发了 NumPy 错误(并且已经存在很长时间),并且不是 Levy 分布的标准形式。应改用scipy.stats.levy。