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 机制处理。

与其他后端一样,可以在 IPython 笔记本中使用以下命令启用 nbagg

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 传递它们的样式。请参阅示例:箱线图中的艺术家自定义箱线图的单独计算和绘制

添加了一个布尔值 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 数组的支持,并添加了 matplotlib.mlab.apply_window,该函数支持对 2D 数组进行加窗。

支持 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 的网格大小。

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

将 kwarg 'which' 添加到 Axes.get_xticklabelsAxes.get_yticklabelsAxis.get_ticklabels。'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',用于接收饼图中楔形和文本对象的属性。例如,可以指定 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() 的输出,以根据自己的喜好自定义小提琴图。

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

更多 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 实现是主要的实现。通过包装 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 后端#

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

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

在 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 在保存的图形中创建可点击的文本。

锚定大小栏字体#

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

Sphinx 扩展#

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

图例和路径效果文档#

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

小部件#

范围选择器#

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

GAE 集成#

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