Matplotlib 1.4 新特性 (2014年8月25日)#

Thomas A. Caswell 担任 1.4 版本的发布经理。

注意

matplotlib 1.4 支持 Python 2.6、2.7、3.3 和 3.4

新色图#

在热力图中,通常使用从绿色到红色的光谱来表示活动强度,但这对于红绿色盲患者来说可能会有问题。现在 matplotlib.cm.Wistia 中提供了一种新的、对色盲友好的色图。这种色图通过亮度变化实现对红色/绿色符号的保留,同时确保了绿色盲的可读性。有关更多信息,请参阅此处

nbagg 后端#

Phil Elson 添加了一个名为 "nbagg" 的新后端,它可以在实时的 IPython notebook 会话中启用交互式图形。该后端利用了为 webagg 后端开发的底层架构(webagg 后端本身在浏览器中提供独立的服务器支持的交互式图形),但是 nbagg 不需要专用的 matplotlib 服务器,因为所有通信都通过 IPython Comm 机制处理。

与其他后端一样,nbagg 可以在 IPython notebook 中通过以下方式启用:

import matplotlib
matplotlib.use('nbagg')

一旦创建并显示图形,它们将放置在 notebook 中的交互式小部件内,允许像任何其他 matplotlib 后端一样进行平移和缩放。由于图形需要连接到 IPython notebook 服务器才能实现交互性,因此一旦保存 notebook,每个图形将呈现为静态图像——从而允许在 nbviewer 等服务上进行非交互式查看。

新绘图功能#

幂律归一化#

Ben Gamari 添加了一种幂律归一化方法,即 PowerNorm。此类别将一系列值映射到 [0,1] 区间,并使用构造函数的 gamma 参数提供的指数进行幂律缩放。幂律归一化对于例如在直方图中强调小样本群体非常有用。

完全可定制的箱线图#

Paul Hobson 对 boxplot() 方法进行了全面改进,使其现在在单个艺术家的样式和位置方面完全可定制。在底层,boxplot() 依赖于一个新函数 (boxplot_stats()),该函数接受当前与 boxplot() 兼容的任何数据结构,并返回一个字典列表,其中包含箱线图每个元素的位置。然后调用第二个方法 bxp,根据统计数据绘制箱线图。

boxplot() 函数仍然可以像以前一样一步生成箱线图。但现在用户可以灵活地独立生成统计数据,或者在通过 bxp 绘图之前修改 boxplot_stats() 的输出。

最后,现在可以切换每个艺术家(例如,箱体、异常值、上限、刻痕)的开启或关闭状态,并且可以通过单独的 kwargs 传入它们的样式。请参见示例:箱线图中的艺术家定制箱线图的独立计算和绘制

添加了一个布尔类型的 kwarg 参数 manage_xticks,如果设置为 False,则禁用 bxp() 对 X 轴刻度和限制的管理。

2D 图中对日期时间轴的支持#

Andrew Dawson 为 contour()contourf()pcolormesh()pcolor() 添加了对日期时间轴的支持。

支持额外的频谱类型#

Todd Jennings 添加了对新型频率谱图的支持:magnitude_spectrum()phase_spectrum()angle_spectrum(),以及 mlab 中对应的函数。

他还将这些频谱类型添加到了 specgram(),并支持线性缩放(除了现有的 dB 缩放)。对额外频谱类型的支持也已添加到 specgram() 中。

他还提高了所有这些函数和绘图类型的性能。

mlab 中对 2D 数组进行去趋势和加窗的支持#

Todd Jennings 在 detrend_mean()detrend_none()detrend() 中添加了对 2D 数组的支持,并添加了支持 2D 数组加窗的 matplotlib.mlab.apply_window

mlab 中对步幅的支持#

Todd Jennings 在 mlab 中添加了一些函数,以便更轻松地使用 NumPy 步幅创建内存高效的 2D 数组。这包括 matplotlib.mlab.stride_repeat(用于重复数组以创建 2D 数组)和 matplotlib.mlab.stride_windows(用于使用滑动窗口从 1D 数组创建 2D 数组)。

新式格式化字符串的格式化器#

添加了 StrMethodFormatter,它与 FormatStrFormatter 功能相同,但接受新式格式化字符串而不是 printf 风格的格式化字符串。

流线图中的一致网格大小#

streamplot()density=1density=(1, 1) 都使用 30x30 的基本网格大小。以前 density=1 使用 30x30 的网格大小,而 density=(1, 1) 使用 25x25 的网格大小。

获取所有刻度标签(主刻度和副刻度)的列表#

Axes.get_xticklabelsAxes.get_yticklabelsAxis.get_ticklabels 添加了 kwarg 参数 'which'。'which' 可以是 'major'(主刻度)、'minor'(副刻度)或 'both'(两者),用于选择返回哪些刻度,类似于 set_ticks_position。如果 'which' 为 None,则沿用旧行为(由布尔参数 minor 控制)。

ImageGrid 中对独立水平/垂直轴填充的支持#

现在,mpl_toolkits.axes_grid1.axes_grid.ImageGrid 的 kwarg 参数 'axes_pad' 可以是一个元组,以在需要独立水平/垂直填充时使用。当每个子图旁边都有带标签的图例并且需要为图例标签留出一些空间时,这应该会非常有用。

支持倾斜变换#

Affine2D 增加了额外的 skewskew_deg 方法来创建倾斜变换。此外,Matplotlib 内部也进行了清理,以支持在 Axes 中使用此类变换。这种变换对于某些绘图类型很重要,特别是气象学中使用的 Skew-T 图。

../../_images/sphx_glr_skewt_001.png

支持在饼图中指定扇区和文本的属性。#

pie 添加了 'wedgeprops' 和 'textprops' 这两个 kwargs 参数,用于接受饼图中扇区和文本对象的属性。例如,可以指定 wedgeprops = {'linewidth':3} 来指定饼图中扇区边框的宽度。有关用户可以指定的更多属性,请查阅扇区和文本对象的文档。

修正了误差条上下限的方向#

Larry Bradley 修正了 errorbar() 方法,使得上下限 (lolims, uplims, xlolims, xuplims) 现在指向正确的方向。

Axes 的对象添加 API 更加一致#

添加了 Axes 方法 add_image,使图像处理与 artists、collections、containers、lines、patches 和 tables 处于同等地位。

小提琴图#

Per Parker, Gregory Kelsie, Adam Ortiz, Kevin Chan, Geoffrey Lee, Deokjae Donald Seo 和 Taesu Terry Lim 添加了小提琴图的基本实现。小提琴图可用于表示样本数据的分布。它们类似于箱线图,但使用核密度估计函数来呈现所用数据样本的平滑近似值。新增功能包括:

violin - 从一组统计数据中渲染小提琴图。violin_stats() - 生成适合渲染小提琴图的统计数据集合。violinplot() - 从一组样本数据创建小提琴图。此方法利用 violin_stats() 处理输入数据,并利用 violin_stats() 进行实际渲染。用户还可以自由修改或替换 violin_stats() 的输出,以根据自己的喜好定制小提琴图。

此功能是为多伦多大学士嘉堡校区由 Anya Tafliovich 在 2014 年冬季开设的软件工程课程实现的。

更多 markevery 选项,用于仅显示标记子集#

Rohan Walker 扩展了 Line2D 中的 markevery 属性。现在可以使用整数、切片对象、NumPy 高级索引或浮点数来指定要显示的标记子集。使用浮点数可以在沿线条近似相等的显示坐标距离处显示标记。

修正了极坐标图中鼠标坐标给出错误 theta 值的问题#

transform_non_affine 中添加了代码,以确保计算出的 theta 值在 0 到 2 * pi 的范围内,因为之前的问题是,在对 theta 计算应用方向和旋转后,该值可能会变为负数。

mplot3d 工具包的简单箭图#

多伦多大学 Anya Tafliovich 教授教授的“大型软件系统工程”课程的学生团队,在他们的学期项目中,为 mplot3d 工具包实现了 3D 空间中箭图的简单版本。此功能记录在 quiver 中。团队成员包括:Ryan Steve D'Souza, Victor B, xbtsw, Yang Wang, David, Caradec Bisesar 和 Vlad Vassilovski。

../../_images/sphx_glr_quiver3d_001.png

极坐标图 r 轴刻度位置#

添加了通过 set_rlabel_position 控制极坐标图中 r 轴刻度标签角位置的功能。

日期处理#

日期转换对 n 维数组的支持#

Andrew Dawson 为 matplotlib.dates.num2date()matplotlib.dates.date2num()matplotlib.dates.datestr2num() 添加了 n 维数组处理支持。同时,单位转换接口 matplotlib.dates.DateConvertermatplotlib.units.Registry 也增加了支持。

配置 (rcParams)#

添加了 savefig.transparent#

控制图形在默认情况下是否以透明背景保存。以前 savefig 总是默认保存为非透明背景。

axes.titleweight#

添加了 rcParam 参数来控制标题的字重。

添加了 axes.formatter.useoffset#

控制 ScalarFormatteruseOffset 的默认值。如果为 True 且数据范围远小于数据平均值,则会确定一个偏移量,使刻度标签有意义。如果为 False,则在所有情况下都会格式化完整数字。

添加了 nbagg.transparent#

控制 nbagg 图形是否具有透明背景。nbagg.transparent 默认为 True

XDG 合规性#

Matplotlib 现在会在符合 XDG 标准的位置查找配置文件(包括 rcparams 和样式)。

添加了 style#

现在可以使用新的 style 包轻松切换不同的样式。

>>> from matplotlib import style
>>> style.use('dark_background')

后续绘图将使用更新的颜色、大小等。要列出所有可用样式,请使用:

>>> print style.available

您可以将自己的自定义 <style name>.mplstyle 文件添加到 ~/.matplotlib/stylelib,或者使用指向包含 matplotlibrc 设置的文件的 URL 调用 use

请注意,这是一个实验性功能,随着用户对这一新功能的测试,其接口可能会发生变化。

后端#

Qt5 后端#

Martin Fitzpatrick 和 Tom Badran 实现了 Qt5 后端。Qt4 和 Qt5 之间命名空间位置的差异通过将 Qt4 伪装成 Qt5 的方式解决,因此 Qt5 实现是主要的实现。Qt4 的向后兼容性通过封装 Qt5 实现来维持。

Qt5Agg 后端目前不兼容 IPython 的 %matplotlib 魔术命令。

1.4.0 版本存在一个已知错误,即工具栏损坏。可以通过以下方式修复:

cd path/to/installed/matplotlib
wget https://github.com/matplotlib/matplotlib/pull/3322.diff
# unix2dos 3322.diff (if on windows to fix line endings)
patch -p2 < 3322.diff

Qt4 后端#

Rudolf Höfler 更改了 subplottool 的外观。所有滑块现在垂直排列,并添加了紧凑布局和重置按钮。此外,subplottool 现在实现为模态对话框。以前它是一个 QMainWindow,在关闭绘图窗口时会留下 SPT 保持打开状态。

在图形选项对话框中,现在可以选择(重新)生成一个简单的自动图例。任何明确设置的图例条目都将丢失,但曲线的标签、线型等更改现在将在图例中更新。

Qt4 后端在 Windows 系统下的交互性能得到了显著提升。

从 Qt 到 Matplotlib 可理解值的按键信号映射得到了极大改进(适用于 Qt4 和 Qt5)。

Cairo 后端#

Cairo 后端现在可以使用 cairocffi 绑定,其维护活跃度高于 pycairo 绑定

Gtk3Agg 后端#

如果安装了 cairocffi 绑定,Gtk3Agg 后端现在可以在 Python 3.x 上运行。

PDF 后端#

添加了用于保存多页 PDF 的上下文管理器。

文本#

SVG 后端支持文本 URL#

SVG 后端现在将 Text 对象的 url 渲染为输出 SVG 中的链接。这允许用户使用 Text 类的 url kwarg 参数在保存的图形中创建可点击文本。

锚定比例尺字体#

AnchoredSizeBar 添加了 fontproperties kwarg 参数,用于控制字体属性。

Sphinx 扩展#

plot_directive Sphinx 扩展中的 :context: 指令现在可以接受一个可选的 reset 设置,这将导致上下文被重置。这允许文档中存在多个不同的上下文。要启用此选项,在任何需要重置上下文时,使用 :context: reset 而不是 :context:

图例和路径效果文档#

图例指南路径效果指南 都已更新,以更好地反映这些强大功能的全部潜力。

小部件#

范围选择器#

SpanSelector 添加了选项 span_stays,该选项使选择矩形在鼠标释放后仍保留在坐标轴上。

GAE 集成#

Matplotlib 现在可以在 Google App Engine 上运行。