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。此类通过构造函数中 gamma 参数指定的指数,将一系列值映射到 [0,1] 区间进行幂律缩放。幂律归一化可用于例如强调直方图中的小群体。

完全可定制的箱线图#

Paul Hobson 对 boxplot() 方法进行了彻底改造,使其在单个艺术家(artist)的样式和位置方面完全可定制。在底层,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 数组的去趋势(detrending)和加窗(windowing)#

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

mlab 中的步长(strides)支持#

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

新样式格式字符串的格式化程序#

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

流图(streamplots)中的一致网格尺寸#

streamplot() 现在对 density=1density=(1, 1) 都使用 30x30 的基础网格尺寸。之前 density=1 使用 30x30 的网格,而 density=(1, 1) 使用 25x25 的网格。

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

Axes.get_xticklabels, Axes.get_yticklabelsAxis.get_ticklabels 中添加了 'which' kwarg。'which' 可以是 'major'、'minor' 或 'both',用于选择返回哪些刻度,类似于 set_ticks_position。如果 'which' 为 None,则保持旧行为(由布尔值 minor 控制)。

ImageGrid 中水平/垂直轴间距的独立支持#

mpl_toolkits.axes_grid1.axes_grid.ImageGrid 的 kwarg 'axes_pad' 现在可以是一个元组,以便需要单独的水平/垂直间距。当你需要在每个子图旁边放置带标签的图例并需要为图例标签留出空间时,这非常有帮助。

支持斜切(skewed)变换#

Affine2D 获得了额外的方法 skewskew_deg 来创建斜切变换。此外,Matplotlib 内部进行了清理以支持在 Axes 中使用此类变换。此变换对于某些绘图类型非常重要,特别是气象学中使用的斜温图(Skew-T)。

../../_images/sphx_glr_skewt_001.png

支持指定饼图中扇形(wedge)和文本的属性。#

添加了 kwargs 'wedgeprops' 和 'textprops' 到 pie,以接受饼图中扇形和文本对象的属性。例如,可以指定 wedgeprops = {'linewidth':3} 来指定饼图中扇形边框的宽度。关于用户可以指定的更多属性,请查看 wedge 和 text 对象的文档。

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

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

更一致的 Axes 添加对象 API#

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

小提琴图(Violin Plots)#

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() 的输出,以便根据自己的喜好定制小提琴图。

此功能是为多伦多大学士嘉堡分校 2014 年冬季学期由 Anya Tafliovich 教授的软件工程课程实现的。

更多的 markevery 选项以仅显示标记的子集#

Rohan Walker 扩展了 Line2D 中的 markevery 属性。现在你可以通过 int、切片对象、numpy 花式索引或浮点数来指定要显示的标记子集。使用浮点数可以在沿着线条的大致等距显示坐标处显示标记。

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

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

mplot3d 工具包的简单颤动图(quiver plot)#

多伦多大学 Prof. 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-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#

现在你可以使用新的 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 magic 一起使用。

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)的外观。现在所有滑块都垂直排列,并添加了用于紧凑布局和重置的按钮。此外,子图工具现在被实现为模态对话框。它以前是 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 在保存的图形中制作可点击的文本。

锚定尺寸栏(Anchored sizebar)字体#

添加了 fontproperties kwarg 到 AnchoredSizeBar 以控制字体属性。

Sphinx 扩展#

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

图例和路径效果文档#

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

小部件#

范围选择器(Span Selector)#

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

GAE 集成#

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