Matplotlib 1.3 新特性(2013年8月1日)#

注意

matplotlib 1.3 支持 Python 2.6, 2.7, 3.2 和 3.3

1.3.1 新增内容#

1.3.1 是一个微版本更新,主要用于改进设置和依赖项处理,并修正和增强了文档。

自 1.3.0 以来,1.3.1 版本进行了以下更改。

增强功能#

错误修复#

  • 直方图绘图现在包含末端线条。

  • 修复了 Molleweide 投影。

  • 改进了对微软最新字体以及带有非 ASCII 元数据的 Macintosh 风格字体的处理。

  • PDF 后端中绘图填充(Hatching)现在可以正常工作。

  • PGF 后端现在支持紧凑边界框(Tight bounding box)。

  • 透明图形现在可以在 Qt4Agg 后端中正确显示。

  • 从一个子图到另一个子图绘制线条的功能现在已修复。

  • 改进了掩码数组(masked arrays)上的单位处理。

安装与依赖项#

  • 现在可以与 pyparsing 1.5.6 或更高版本配合使用,且不会产生数百条警告。

  • 现在可以在 MS-Windows 的 64 位版本 Ghostscript 上运行。

  • 当从源码安装到没有 Numpy 的环境中时,将首先下载并构建 Numpy,然后将其用于构建 matplotlib。

  • 外部安装的后端现在始终使用模块的完全限定路径进行导入。

  • 兼容较新版本的 wxPython。

  • 现在可以利用系统中全局安装的 PyCXX 从源码构建。

  • 更好地检测 Gtk3 依赖项。

测试#

  • 测试现在应在非英语区域设置下正常工作。

  • PEP8 一致性测试现在报告问题的具体位置。

新的绘图功能#

xkcd 风格草图绘图#

为了让你的图表拥有一种可能缺失的权威感,Michael Droettboom(受 PR #1329 中许多人的启发)添加了一种 xkcd 风格的草图绘图模式。要使用它,只需在绘图前调用 matplotlib.pyplot.xkcd。如果需要更精细的控制,还可以通过 matplotlib.artist.Artist.set_sketch_params() 单独修改每个艺术家的草图参数。

../../_images/sphx_glr_xkcd_001.png

更新了 Axes3D.contour 方法#

Damon McDougall 更新了 tricontour()tricontourf() 方法,允许在任意非结构化用户指定三角剖分上进行 3D 等高线绘图。

../../_images/sphx_glr_tricontour3d_001.png

新的 eventplot 绘图类型#

Todd Jennings 添加了一个 eventplot() 函数,用于创建多行或多列相同的线段。

../../_images/sphx_glr_eventplot_demo_001.png

作为该功能的一部分,引入了一个新的 EventCollection 类,允许绘制和操作多行或多列相同的线段。

三角网格插值#

Geoffroy Billotey 和 Ian Thomas 添加了用于在三角网格内进行插值的类:(LinearTriInterpolatorCubicTriInterpolator)以及一个用于查找点所在三角形的工具类(TrapezoidMapTriFinder)。还添加了一个用于执行网格细化和平滑等高线的辅助类(UniformTriRefiner)。最后,添加了一个实现三角网格改进基本工具的类(TriAnalyzer)。

../../_images/sphx_glr_tricontour_smooth_user_001.png

stackplot 的基准线#

Till Stensitzki 为 stackplot() 添加了非零基准线,它们可以是对称的或加权的。

../../_images/sphx_glr_stackplot_demo_001.png

矩形颜色条扩展#

Andrew Dawson 为 colorbar() 添加了一个新的关键字参数 extendrect,可选择将颜色条扩展设为矩形而非三角形。

更稳健的箱线图#

Paul Hobson 修复了 boxplot() 方法,防止在分布异常的数据集中将须(whiskers)绘制在框内。

调用无参数的 subplot()#

调用不带任何参数的 subplot() 现在与 subplot(111)subplot(1, 1, 1) 的作用相同——它为整个图形创建一个轴。这已经是 axes()subplots() 的行为,现在这种一致性也扩展到了 subplot()

绘图#

面部颜色和边缘颜色的独立透明度值#

Wes Campaigne 修改了 Patch 对象的绘制方式,使得(对于支持透明度的后端)可以通过以 RGBA 格式指定颜色来为面部和边缘设置不同的 Alpha 值。注意,如果你为补丁对象设置了 Alpha 属性(例如使用 set_alpha()alpha 关键字参数),该值将覆盖面部和边缘颜色中设置的 Alpha 分量。

线条的路径效果#

感谢 Jae-Joon Lee,路径效果现在也适用于绘图线条。

../../_images/sphx_glr_patheffect_demo_001.png

更容易为色阶创建颜色映射和归一化器#

Phil Elson 添加了 matplotlib.colors.from_levels_and_colors() 函数,可以轻松地为 matplotlib.pyplot.pcolormesh() 等绘图类型创建离散颜色的颜色映射和归一化器,其接口类似于 matplotlib.pyplot.contourf

对背景颜色的完全控制#

Wes Campaigne 和 Phil Elson 修复了 Agg 后端,使得当 fig.patch.get_alpha() 不为 1 时,PNG 保存的背景颜色正确。

改进了 bbox_inches="tight" 功能#

通过 pyplot.savefig 传递 bbox_inches="tight" 现在会考虑图形上的所有艺术家——之前并非如此,这导致了一些无法按预期工作的边缘情况。

初始化旋转矩形#

Damon McDougall 扩展了 Rectangle 构造函数以接受 angle 关键字参数,用于指定矩形的旋转角度(度)。

文本#

锚定文本支持#

SVG 和 pgf 后端现在能够将其输出格式中的文本对齐信息保存下来。这允许在保存的图形中编辑文本元素(例如使用 Inkscape),同时保留其预期的位置。对于 SVG,请注意你必须禁用默认的文本转路径转换(mpl.rc('svg', fonttype='none'))。

更好的垂直文本对齐和多行文本#

文本的垂直对齐现在在不同后端之间保持一致。你可能会在文本位置上看到细微的差异,特别是在旋转文本方面。

如果你使用的是自定义后端,请注意 draw_text 渲染器方法现在传递的是基线的位置,而不是文本边界框底部的位置。

多行文本现在会为极高或极低的文本(如上标和下标)留出足够的空间。

左侧和右侧轴标题#

Andrew Dawson 添加了通过 title() 的新关键字参数 loc,在轴顶部的左侧和右侧添加轴标题的功能。

改进的手动等高线标签定位#

Brian Mattern 修改了手动等高线标签定位代码,以沿着线段进行插值,并找到等高线上最接近请求位置的点。之前使用的是最近的路径顶点,在直线等高线的情况下,这有时与请求的位置相距甚远。现在可以实现更精确的标签定位。

配置 (rcParams)#

快速查找 rcParams#

Phil Elson 通过向 matplotlib.RcParams.find_all() 传递有效的正则表达式,使搜索 rcParameters 变得更加容易。matplotlib.RcParams 现在也具有优美的 repr 和 str 表示,以便清晰地打印搜索结果。

>>> import matplotlib
>>> print(matplotlib.rcParams.find_all('\.size'))
RcParams({'font.size': 12,
          'xtick.major.size': 4,
          'xtick.minor.size': 2,
          'ytick.major.size': 4,
          'ytick.minor.size': 2})

axes.xmarginaxes.ymargin 添加到 rcParams#

rcParams["axes.xmargin"](默认:0.05)和 rcParams["axes.ymargin"](默认:0.05)被添加用于配置默认的边距。之前它们被硬编码为默认值 0,现在这两个 rcParam 值的默认值均为 0。

对字体 rcParams 的更改#

现在 font.* rcParams 仅影响设置后创建的文本对象,不会回溯影响已经存在的文本对象。这使其行为与大多数其他 rcParams 一致。

添加 savefig.jpeg_quality rcParam#

添加了 savefig.jpeg_quality rcParam,以便用户可以配置将图形保存为 JPEG 时使用的默认质量。默认质量为 95;之前默认质量为 75。此更改最小化了 JPEG 图像中固有的伪影,特别是在绘图等具有颜色锐利变化的图像中。

后端#

WebAgg 后端#

Michael Droettboom、Phil Elson 等人开发了一个新的后端 WebAgg,用于在 Web 浏览器中显示图形。它不仅支持动画,还具有完全的交互性。

../../_images/webagg_screenshot.png

未来的 matplotlib 版本将把此后端与 IPython 笔记本集成,以实现基于 Web 浏览器的完整绘图前端。

记住保存目录#

Martin Spacek 使保存图形对话框能够记住上次保存到的目录。默认值可通过 matplotlibrc 中的新 rcParams["savefig.directory"](默认:'~')进行配置。

文档与示例#

Numpydoc 文档字符串#

Nelle Varoquaux 启动了一个持续项目,旨在将 matplotlib 的文档字符串转换为 numpydoc 格式。有关更多信息,请参见 MEP10

示例重组#

Tony Yu 开始着手将示例重组为更有意义的类别。新的画廊页面正是这一持续工作的成果。有关更多信息,请参见 MEP12

示例现在使用 subplots()#

为了简洁明了,大多数 示例 现在都使用较新的 subplots(),它可以在一次调用中创建一个图形和一个(或多个)轴对象。旧方法涉及调用 figure(),后跟一个(或多个)subplot() 调用。

基础设施#

清理工作#

移除了一些在 1.2 或更早版本中已弃用,或长期处于无法使用状态的功能。亮点包括移除了 Qt 版本 3 后端,以及 FltkAgg 和 Emf 后端。有关完整列表,请参见 API Changes in 1.3.x

新的安装脚本#

matplotlib 1.3 包含了一个完全重写的安装脚本。我们在 tarball 和安装程序本身中附带的依赖项减少了。值得注意的是,pytzdateutilpyparsingsix 不再包含在 matplotlib 中。你可以先手动安装它们,或者让 pip 在安装 matplotlib 时将它们作为依赖项安装。现在可以选择不在安装中包含某些子组件,例如单元测试数据。有关更多信息,请参见 setup.cfg.template

XDG 基础目录支持#

在 Linux 上,matplotlib 现在使用 XDG 基础目录规范来查找 matplotlibrc 配置文件。matplotlibrc 现在应保存在 ~/.config/matplotlib 而非 ~/.matplotlib 中。如果你的配置文件仍位于旧位置,它仍会被使用,但会显示一条警告。

捕捉使用 pyplot 打开过多图形的情况#

通过 pyplot.figure 创建的图形会一直保留,直到被显式关闭。因此,matplotlib 的新用户在循环中创建大量图形而不关闭它们时,内存耗尽的情况很常见。

matplotlib 现在在一次打开过多图形时会显示 RuntimeWarning。默认情况下,该警告在打开 20 个或更多图形时显示,但具体的数量可以通过 figure.max_open_warning rcParam 进行控制。