1.2.x 中的 API 变更#

  • rc 参数 toolbarclassic 选项已被弃用,并将在下一个版本中移除。

  • matplotlib.cbook.isvector 方法已被移除,因为它不再起作用。

  • Axes 上的 rasterization_zorder 属性设置了一个 zorder,低于此 zorder 的艺术家将被光栅化。 它的默认值为 -30000.0,但现在默认值为 None,这意味着没有艺术家会被光栅化。 为了光栅化低于给定 zorder 值的艺术家,必须显式调用 set_rasterization_zorder

  • scatter()scatter 中,当使用元组指定标记时,角度现在以度数而不是弧度指定。

  • 使用 twinx()twiny() 不再覆盖轴上的当前定位器和格式化器。

  • contourf() 中,extend 关键字的处理方式已经改变。以前,扩展范围在归一化后映射到 0, 1 之后,因此它们总是对应于颜色映射的极端值。现在它们被映射到这个范围之外,以便它们对应于由 set_under()set_over() 方法确定的特殊颜色映射值,这些方法默认到颜色映射的端点。

  • 新的 rc 参数 savefig.format 取代了 cairo.formatsavefig.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,作为 markeredgewidthmew 关键字参数的直观别名,这些参数间接控制了误差线上帽子的厚度。为了向后兼容,指定任何一个原始关键字参数都将覆盖 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_isdatay_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)。

  • twinxtwiny 现在如果父轴是 SubplotBase 的实例,则返回 SubplotBase 的实例。

  • 所有基于 Qt3 的后端现在都已弃用,原因是缺少 py3k 绑定。Qt 和 QtAgg 后端将继续在 v1.2.x 中为 py2.6 和 py2.7 工作。预计在下一个版本中将完全移除对 Qt3 的支持。

  • matplotlib.colors.ColorConverterColormapNormalize 现在都是 object 的子类

  • ContourSet 实例不再具有 transform 属性。取而代之的是,通过 get_transform 方法访问变换。