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=1
和 density=(1, 1)
都使用 30x30 的基本网格大小。以前,density=1
使用 30x30 的网格大小,但 density=(1, 1)
使用 25x25 的网格大小。
获取所有刻度标签(主要和次要)的列表#
将 kwarg 'which' 添加到 Axes.get_xticklabels
、Axes.get_yticklabels
和 Axis.get_ticklabels
。'which' 可以是 'major'、'minor' 或 'both',以选择要返回的刻度,类似于 set_ticks_position
。如果 'which' 是 None
,则使用旧行为(由布尔值 minor 控制)。
在 ImageGrid 中支持单独的水平/垂直轴填充#
如果需要单独的水平/垂直填充,则 mpl_toolkits.axes_grid1.axes_grid.ImageGrid
的 kwarg 'axes_pad' 现在可以是元组。当每个子图旁边都有一个带标签的图例,并且您需要为图例的标签腾出一些空间时,这应该非常有用。
支持倾斜变换#
Affine2D
获得了额外的方法 skew
和 skew_deg
,以创建倾斜变换。此外,清理了 matplotlib 内部结构,以支持在 Axes
中使用此类变换。这种变换对于某些绘图类型非常重要,特别是气象学中使用的 Skew-T 图。
支持在饼图中指定楔形和文本的属性。#
在 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。
极坐标图 r 轴刻度位置#
添加了通过 set_rlabel_position
控制极坐标图上 r 轴刻度标签的角位置的功能。
日期处理#
日期转换的 n 维数组支持#
Andrew Dawson 添加了对 matplotlib.dates.num2date()
、matplotlib.dates.date2num()
和 matplotlib.dates.datestr2num()
的 n 维数组处理支持。还为单位转换接口 matplotlib.dates.DateConverter
和 matplotlib.units.Registry
添加了支持。
配置 (rcParams)#
添加了 savefig.transparent
#
控制默认情况下是否以透明背景保存图形。以前,savefig
始终默认为非透明背景。
axes.titleweight
#
添加了 rcParam 来控制标题的粗细
添加了 axes.formatter.useoffset
#
控制 ScalarFormatter
中 useOffset 的默认值。如果 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 上运行。