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 笔记本会话中启用了交互式图形。该后端利用了为 webagg 后端开发的基础设施,webagg 本身在浏览器中提供了独立的、由服务器支持的交互式图形,然而 nbagg 不需要专门的 matplotlib 服务器,因为所有通信都通过 IPython Comm 机制处理。

与其他后端一样,nbagg 可以在 IPython 笔记本中启用,方法如下:

import matplotlib
matplotlib.use('nbagg')

一旦创建并随后显示图形,它们将被放置在笔记本内的交互式小部件中,允许以与其他任何 matplotlib 后端相同的方式进行平移和缩放。因为图形需要与 IPython 笔记本服务器建立连接以实现其交互性,一旦笔记本被保存,每个图形将被渲染为静态图像——从而允许在诸如 nbviewer 的服务上非交互式地查看图形。

新的绘图功能#

幂律归一化#

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

完全可自定义的箱线图#

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

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

最后,每个艺术家(例如,箱体、离群值、帽、凹口)现在可以被切换开或关,并且它们的样式可以通过单独的 kwargs 传递。请参见示例:箱线图中的艺术家自定义分离箱线图的计算和绘制

添加了一个布尔关键字参数 manage_xticks,如果为 False,则禁用由 bxp() 管理的 x 轴上的刻度和限制。

二维图中的日期时间轴支持#

Andrew Dawson 为 contour()contourf()pcolormesh()pcolor() 添加了对 datetime 轴的支持。

支持额外的频谱类型#

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

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

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

在 mlab 中支持去趋势和窗口化 2D 数组#

Todd Jennings 在 detrend_mean()detrend_none()detrend() 中添加了对二维数组的支持,同时添加了支持二维数组窗口化的 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() 使用 30x30 的基础网格大小,无论 density=1 还是 density=(1, 1)。之前,density=1 使用 30x30 的网格大小,而 density=(1, 1) 使用 25x25 的网格大小。

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

Axes.get_xticklabelsAxes.get_yticklabelsAxis.get_ticklabels 添加了 '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 添加了 kwargs 'wedgeprops' 和 'textprops',以接受饼图中楔形和文本对象的属性。例如,可以通过指定 wedgeprops = {'linewidth':3} 来指定饼图中楔形边界的宽度。有关用户可以指定的更多属性,请查看楔形和文本对象的文档。

修复了误差线上限/下限的方向#

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

更一致的 Axes 添加对象 API#

添加了 Axes 方法 add_image,使图像处理与艺术家、集合、容器、线条、补丁和表格处于同等地位。

小提琴图#

根据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空间中箭头图的简单版本,作为他们的学期项目之一。此功能在`~.Axes3D.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-tick 标签角度的功能。

日期处理#

日期转换的 n-d 数组支持#

Andrew Dawson 为 matplotlib.dates.num2date()matplotlib.dates.date2num()matplotlib.dates.datestr2num() 添加了对 n-d 数组处理的支持。同时,也为单位转换接口 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 实现成为了主要的实现。通过包装 Qt5 实现来保持对 Qt4 的向后兼容性。

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 后端#

鲁道夫·霍夫勒改变了子图工具的外观。现在所有的滑块都是垂直排列的,增加了紧凑布局和重置按钮。此外,子图工具现在实现为一个模态对话框。它之前是一个QMainWindow,如果关闭绘图窗口,子图工具会保持打开状态。

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

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

从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 关键字参数,以控制字体属性。

Sphinx 扩展#

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

图例和路径效果文档#

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

小部件#

Span Selector#

SpanSelector 添加了一个 span_stays 选项,该选项使得在释放鼠标后,选择器矩形仍然保持在轴上。

GAE 集成#

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