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
#
figure()
和 subplots()
现在可以调用 constrained_layout=True
kwarg 来启用 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
)已被修改为将 figure 传递给 GridSpec
。
x轴标签和y轴标签现在可以自动对齐#
如果刻度标签的宽度差异很大,则子图轴的 ylabels
可能会在水平方向上错位。 如果一个子图上的刻度标签旋转(例如),xlabels
也会发生同样的情况。 Figure
类上的新方法:Figure.align_xlabels
和 Figure.align_ylabels
现在将这些标签水平或垂直对齐。 如果用户只想对齐某些轴,则可以传递轴列表。 如果未传递列表,则该算法会查看图形上的所有标签。
只有具有相同子图位置的标签才会对齐。 即,仅当子图位于子图布局的同一列中时,才会对齐 y 轴标签。
对齐在调用这些方法后是持久的且自动的。
一个方便的包装器 Figure.align_labels
同时调用这两个函数。
轴图例现在包含在 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"。
新的色盲友好颜色循环样式#
添加了一种定义颜色循环的新样式 tableau-colorblind10,以提供另一种色盲友好绘图选项。 可以在样式表的参考中找到此新样式的演示。 要加载此颜色循环以代替默认的颜色循环
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,该 kwarg 指定从轴顶部到绘制标题位置的距离。 pad 的单位是点,默认值是(已存在的)rcParams["axes.titlepad"]
的值(默认值:6.0
)。
Matplotlib 中 2 种颜色的比较#
由于可以使用多种方式指定 Matplotlib 中的颜色,因此添加了 matplotlib.colors.same_color
方法,该方法检查两个 colors
是否相同。
极坐标图的自动缩放会捕捉到原点#
如果在极坐标图中自动设置限制,则如果自动限制在附近,则现在会将径向限制捕捉到零。 这意味着从零开始绘图不会自动缩放以包括径向轴上的小负值。
仍然可以使用 set_ylim
以通常的方式手动设置限制。
PathLike 支持#
在 Python 3.6+ 上,savefig
,imsave
,imread
和动画编写器现在接受 os.PathLike
作为输入。
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"]
(默认值:False
)、rcParams["xtick.labelbottom"]
(默认值:True
)、rcParams["ytick.labelright"]
(默认值:False
) 和 rcParams["ytick.labelleft"]
(默认值: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 的支持#
现在可以使用带有 Qt5 的 ToolManager。例如
import matplotlib
matplotlib.use('QT5AGG')
matplotlib.rcParams['toolbar'] = 'toolmanager'
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.show()
目前将新的工具类视为实验性的,API 可能会发生变化,rcParam 也可能会发生变化。
主要示例 工具管理器 显示了更多细节,只需调整标题以使用 QT 而不是 GTK3。
TkAgg 后端经过重新设计以支持 PyPy#
PyPy 现在可以使用 TkAgg 后端进行绘图,支持 PyPy 5.9 及更高版本(适用于 python 2.7 的 PyPy 和适用于 python 3.5 的 PyPy)。
Python 日志库用于调试输出#
Matplotlib 过去(零星地)使用内部详细输出报告器。此版本将这些调用转换为使用标准的 python logging
库。
对旧的 rcParams
verbose.level
和 verbose.fileo
的支持已删除。
命令行选项 --verbose-helpful
和 --verbose-debug
仍然被接受,但已弃用。它们现在等效于设置 logging.INFO
和 logging.DEBUG
。
记录器的根名称为 matplotlib
,可以从程序中访问,如下所示
import logging
mlog = logging.getLogger('matplotlib')
改进了 repr
,用于 Transform
#
Transform
现在以更易读的方式缩进它们的 repr
。
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.]])))))))