1.2.x 中的 API 变更#
rc 参数
toolbar
的classic
选项已被弃用,并将在下一个版本中移除。matplotlib.cbook.isvector
方法已被移除,因为它不再起作用。在
Axes
上的rasterization_zorder
属性设置了一个 zorder,低于此 zorder 的艺术家将被光栅化。 它的默认值为 -30000.0,但现在默认值为 None,这意味着没有艺术家会被光栅化。 为了光栅化低于给定 zorder 值的艺术家,必须显式调用set_rasterization_zorder
。在
contourf()
中,extend 关键字的处理方式已经改变。以前,扩展范围在归一化后映射到 0, 1 之后,因此它们总是对应于颜色映射的极端值。现在它们被映射到这个范围之外,以便它们对应于由set_under()
和set_over()
方法确定的特殊颜色映射值,这些方法默认到颜色映射的端点。新的 rc 参数
savefig.format
取代了cairo.format
和savefig.extension
,并设置了matplotlib.figure.Figure.savefig()
使用的默认文件格式。在
pyplot.pie()
和axes.Axes.pie()
中,现在可以设置饼图的半径;将 radius 设置为 'None'(默认值),将导致饼图的半径为 1,与之前相同。现在不推荐使用
matplotlib.projections.projection_factory
,而是推荐使用matplotlib.projections.process_projection_requirements
进行轴类识别,然后直接调用轴类(在撰写本文时,执行此操作的函数有:add_axes()
、add_subplot()
和gca()
)。因此:key = figure._make_key(*args, **kwargs) ispolar = kwargs.pop('polar', False) projection = kwargs.pop('projection', None) if ispolar: if projection is not None and projection != 'polar': raise ValueError('polar and projection args are inconsistent') projection = 'polar' ax = projection_factory(projection, self, rect, **kwargs) key = self._make_key(*args, **kwargs) # is now projection_class, kwargs, key = \ process_projection_requirements(self, *args, **kwargs) ax = projection_class(self, rect, **kwargs)
这一更改意味着第三方对象可以通过提供
_as_mpl_axes
方法将自己暴露为 Matplotlib 轴。更多详情请参见matplotlib.projections
。在
colorbar()
和ColorbarBase
中新增的关键字 extendfrac 允许用户控制色带上三角形最小值和最大值扩展的大小。在
errorbar()
中新增了一个关键字 capthick,作为 markeredgewidth 和 mew 关键字参数的直观别名,这些参数间接控制了误差线上帽子的厚度。为了向后兼容,指定任何一个原始关键字参数都将覆盖 capthick 提供的任何值。变换子类的行为现在有了微妙的变化。如果你的变换实现了非仿射变换,那么它应该重写
transform_non_affine
方法,而不是通用的transform
方法。以前变换会定义transform
,然后将该方法复制到transform_non_affine
中:class MyTransform(mtrans.Transform): def transform(self, xy): ... transform_non_affine = transform
这种方法将不再正确工作,应改为:
class MyTransform(mtrans.Transform): def transform_non_affine(self, xy): ...
艺术家不再有
x_isdata
或y_isdata
属性;取而代之的是,任何艺术家的变换都可以通过artist_instance.get_transform().contains_branch(ax.transData)
进行查询。添加到轴的线条现在在更新数据和视图限制时会考虑它们的变换。这意味着变换现在可以用作预变换。例如:
>>> import matplotlib.pyplot as plt >>> import matplotlib.transforms as mtrans >>> ax = plt.axes() >>> ax.plot(range(10), transform=mtrans.Affine2D().scale(10) + ax.transData) >>> print(ax.viewLim) Bbox('array([[ 0., 0.],\n [ 90., 90.]])')
现在,可以使用变换上的新减法方法,以优化的方式轻松获得从一个变换的坐标系到另一个变换的坐标系的变换。例如,要从数据坐标系转换到轴坐标系:
>>> import matplotlib.pyplot as plt >>> ax = plt.axes() >>> data2ax = ax.transData - ax.transAxes >>> print(ax.transData.depth, ax.transAxes.depth) 3, 1 >>> print(data2ax.depth) 2
在1.2版本之前,这只能通过次优的方式实现,使用
ax.transData + ax.transAxes.inverted()
(深度是一个新概念,但如果它存在,在这个例子中将返回4)。twinx
和twiny
现在如果父轴是 SubplotBase 的实例,则返回 SubplotBase 的实例。所有基于 Qt3 的后端现在都已弃用,原因是缺少 py3k 绑定。Qt 和 QtAgg 后端将继续在 v1.2.x 中为 py2.6 和 py2.7 工作。预计在下一个版本中将完全移除对 Qt3 的支持。
matplotlib.colors.ColorConverter
、Colormap
和Normalize
现在都是object
的子类ContourSet 实例不再具有
transform
属性。取而代之的是,通过get_transform
方法访问变换。