Matplotlib 2.2 中的新功能(2018 年 3 月 6 日)#
约束布局管理器#
警告
约束布局是实验性的.行为和 API 可能会发生变化,或者整个功能可能会在没有弃用期的情况下被删除.
添加了一种新方法来自动决定子图及其组织 GridSpec 实例之间的间距.它旨在取代著名的 tight_layout 方法.它通过一个新的 constrained_layout=True kwarg 调用 Figure 或 subplots .
此软件包有新的 rcParams ,并且可以使用新的 set_constrained_layout_pads 更精细地调整间距.
功能包括:
具有固定大小的内边距(以英寸为单位)的子图的自动间距,围绕子图及其所有装饰器,以及子图之间作为子图大小的分数的空间.
suptitle的间距,以及附加到多个轴的颜色条.使用
GridSpecFromSubplotSpec的嵌套GridSpec布局.
有关更多详细信息和功能,请参见新的教程 约束布局指南
请注意访问此内容的新 API:
新的 plt.figure 和 plt.subplots kwarg: constrained_layout#
现在可以使用 constrained_layout=True kwarg 调用 figure() 和 subplots() 来启用 constrained_layout.
新的 ax.set_position 行为#
Axes.set_position 现在使指定的轴不再响应 constrained_layout ,这与用户想要手动放置轴的想法一致.
在内部,这意味着库中的旧 ax.set_position 调用已更改为私有 ax._set_position 调用,以便 constrained_layout 仍然适用于这些轴.
GridSpec 的新 figure kwarg#
为了方便 constrained_layout , GridSpec 现在接受 figure 关键字.这是向后兼容的,因为不提供此关键字只会导致 constrained_layout 不对由该 GridSpec 实例组织的子图进行操作.使用 GridSpec 的例程(例如 fig.subplots )已被修改为将图形传递给 GridSpec .
xlabels 和 ylabels 现在可以自动对齐#
如果刻度标签的宽度差异很大,则子图轴的 ylabels 可能会水平错位.如果在一个子图上旋转了刻度标签(例如), xlabels 也会发生同样的情况. Figure 类上的新方法:Figure.align_xlabels 和 Figure.align_ylabels 现在将水平或垂直对齐这些标签.如果用户只想对齐某些轴,则可以传递轴列表.如果没有传递列表,则该算法会查看图形上的所有标签.
只有具有相同子图位置的标签才会对齐.也就是说,只有当子图位于子图布局的同一列时,ylabel 才会对齐.
调用这些函数后,对齐是持久的且自动的.
一个方便的包装器 Figure.align_labels 会一次性调用两个函数.
(Source code, png)
Axes 图例现在包含在 tight_bbox 中#
通过 ax.legend 创建的图例有时可能会溢出轴的限制.像 fig.tight_layout() 和 fig.savefig(bbox_inches='tight') 这样的工具会裁剪这些图例.进行了一项更改,将其包含在 tight 计算中.
Cividis 颜色映射#
添加了一个名为"cividis"的新深蓝色/黄色颜色映射.与 viridis 类似,cividis 在感知上是均匀的且对色盲友好.但是,cividis 更进一步:它不仅可以被色盲用户使用,而且对于色盲和非色盲用户来说,它实际上看起来应该完全相同.有关更多详细信息,请参见 Nuñez J, Anderton C, and Renslow R: "Optimizing colormaps with consideration for color vision deficiency to enable accurate interpretation of scientific data" .
(Source code, png)
新的对色盲友好的颜色环样式#
添加了一种定义颜色环的新样式,tableau-colorblind10,为对色盲友好的绘图提供另一种选择.可以在样式表的 reference 中找到此新样式的演示.要加载此颜色环以代替默认颜色环,请执行以下操作:
import matplotlib.pyplot as plt
plt.style.use('tableau-colorblind10')
支持 numpy.datetime64#
Matplotlib 长期以来一直在 matplotlib.dates 中支持 datetime.datetime 日期.我们现在也支持 numpy.datetime64 日期.任何可以使用 datetime.datetime 的地方,都可以使用 numpy.datetime64 .例如:
time = np.arange('2005-02-01', '2005-02-02', dtype='datetime64[h]')
plt.plot(time)
使用 Pillow 编写动画#
现在可以使用 Pillow 作为动画编写器.当前支持的输出格式为 gif (Pillow>=3.4) 和 webp (Pillow>=5.0).例如,使用:
from __future__ import division
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
fig, ax = plt.subplots()
line, = plt.plot([0, 1])
def animate(i):
line.set_ydata([0, i / 20])
return [line]
anim = FuncAnimation(fig, animate, 20, blit=True)
anim.save("movie.gif", writer=PillowWriter(fps=24))
plt.show()
滑块 UI 小部件可以捕捉到离散值#
滑块 UI 小部件可以采用可选参数 valstep.这样做会强制滑块仅采用离散值,从 valmin 开始,以 valstep 的大小递增到 valmax.
如果 closedmax==True,则滑块也将捕捉到 valmax.
capstyle 和 joinstyle 属性已添加到 Collection#
Collection 类现在具有可自定义的 capstyle 和 joinstyle 属性.例如,这允许用户设置误差线的 capstyle .
pad kwarg 添加到 ax.set_title#
方法 Axes.set_title 现在有一个 pad kwarg,它指定从轴的顶部到绘制标题的位置的距离.pad 的单位是点,默认值是(已经存在的) rcParams["axes.titlepad"] (default: 6.0) 的值.
Matplotlib 中 2 种颜色的比较#
由于可以在 Matplotlib 中以多种方式指定颜色,因此添加了 matplotlib.colors.same_color 方法,该方法检查两个 colors 是否相同.
自动缩放极坐标图会捕捉到原点#
如果自动限制在附近,则在极坐标图中自动设置限制现在会将径向限制捕捉到零.这意味着从零开始绘图不会自动缩放以包括径向轴上的小负值.
仍然可以使用 set_ylim 以通常的方式手动设置限制.
PathLike 支持#
在 Python 3.6+ 上, savefig , imsave , imread 和动画编写器现在接受 os.PathLike s 作为输入.
Axes.tick_params 可以设置网格线属性#
Tick 对象包含网格线以及刻度线和标签. Axis.set_tick_params , Axes.tick_params 和 pyplot.tick_params 现在有关键字参数 'grid_color','grid_alpha','grid_linewidth' 和 'grid_linestyle',用于覆盖 rcParams 中的默认值:'grid.color' 等.
Axes.imshow 将 RGB 值裁剪到有效范围#
当传递给 Axes.imshow 的 RGB 或 RGBA 值超出范围时,它现在会记录一个警告并将它们裁剪到有效范围.旧的行为,即回绕到该范围内,常常隐藏了异常值,并使得解释 RGB 图像不可靠.
matplotlibrc 中用于放置 xaxis 和 yaxis 刻度标签的属性#
在 matplotlibrc 中引入了四个新的布尔属性,用于 xaxis 和 yaxis 刻度标签的默认位置,即 rcParams["xtick.labeltop"] (default: False) , rcParams["xtick.labelbottom"] (default: True) , rcParams["ytick.labelright"] (default: False) 和 rcParams["ytick.labelleft"] (default: True) .这些也可以在 rcParams 中更改.
gtk3 的 PGI 绑定#
GTK3 后端现在可以使用 PGI 而不是 PyGObject.PGI 是 GObject 的一个相当不完整的绑定,因此不建议使用它;它的主要优点是它在 Travis 上的可用性(因此允许对 gtk3agg 和 gtk3cairo 后端进行 CI 测试).
绑定选择规则如下: - 如果已经导入了 gi ,则使用它;否则 - 如果已经导入了 pgi ,则使用它;否则 - 如果可以导入 gi ,则使用它;否则 - 如果可以导入 pgi ,则使用它;否则 - 报错.
因此,要强制在使用安装了两个绑定时使用 PGI,请首先导入它.
Qt,WX 和 Tk 画布的 Cairo 渲染#
新的 Qt4Cairo , Qt5Cairo , WXCairo 和 TkCairo 后端允许 Qt,Wx 和 Tk 画布使用 Cairo 渲染,而不是 Agg.
在新 ToolManager 中添加了对 QT 的支持#
现在可以将 ToolManager 与 Qt5 一起使用.例如:
import matplotlib
matplotlib.use('QT5AGG')
matplotlib.rcParams['toolbar'] = 'toolmanager'
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show()
目前将新的 Tool 类视为实验性的,API 可能会发生变化,也许 rcParam 也会发生变化
主要示例 工具管理器 显示了更多详细信息,只需调整标题以使用 QT 而不是 GTK3
TkAgg 后端经过重新设计以支持 PyPy#
PyPy 现在可以使用 TkAgg 后端进行绘图,支持 PyPy 5.9 及更高版本(PyPy for python 2.7 和 PyPy for python 3.5).
Python logging 库用于调试输出#
Matplotlib 过去(零星地)使用了一个内部的详细输出报告器.此版本将这些调用转换为使用标准的 python logging 库.
支持旧的 rcParams verbose.level 和 verbose.fileo 已被删除.
命令行选项 --verbose-helpful 和 --verbose-debug 仍然被接受,但已弃用.它们现在等同于设置 logging.INFO 和 logging.DEBUG .
记录器的根名称是 matplotlib ,可以从程序中访问,如下所示:
import logging
mlog = logging.getLogger('matplotlib')
改进了 Transform s 的 repr#
Transform s 现在以更易读的方式缩进其 repr s:
In [1]: l, = plt.plot([]); l.get_transform()
Out[1]:
CompositeGenericTransform(
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())),
CompositeGenericTransform(
BboxTransformFrom(
TransformedBbox(
Bbox(x0=-0.05500000000000001, y0=-0.05500000000000001, x1=0.05500000000000001, y1=0.05500000000000001),
TransformWrapper(
BlendedAffine2D(
IdentityTransform(),
IdentityTransform())))),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.125, y0=0.10999999999999999, x1=0.9, y1=0.88),
BboxTransformTo(
TransformedBbox(
Bbox(x0=0.0, y0=0.0, x1=6.4, y1=4.8),
Affine2D(
[[ 100. 0. 0.]
[ 0. 100. 0.]
[ 0. 0. 1.]])))))))