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 元数据的 Microsoft 和 Macintosh 样式字体中最新字体的处理。

  • 填充图之间的阴影现在在 PDF 后端中正常工作。

  • 紧密边界框支持现在在 PGF 后端中正常工作。

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

  • 现在可以在一个子图到另一个子图之间绘制线条了。

  • 蒙版数组上的单位处理已得到改进。

设置和依赖#

  • 现在支持 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() 单独修改每个 artist 的草图参数。

../../_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() 方法,该方法可以防止对于分布异常的数据集,胡须线被绘制在箱体内。

不带参数调用 subplot()#

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

绘图#

面和边颜色的独立 alpha 值#

Wes Campaigne 修改了 Patch 对象的绘制方式,使得(对于支持透明度的后端)可以通过指定 RGBA 格式的颜色来为面和边设置不同的 alpha 值。请注意,如果您为 patch 对象设置了 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" 功能改进#

现在将 bbox_inches="tight" 传递给 pyplot.savefig 会考虑到图形上的 所有 artist —— 以前并非如此,导致了一些未按预期工作的边缘情况。

初始化旋转矩形#

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

文本#

锚定文本支持#

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

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

文本的垂直对齐现在在所有后端中保持一致。您可能会看到文本放置上的细微差异,特别是对于旋转的文本。

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

多行文本现在将为非常高或非常低的文本(例如上标和下标)的高度留出足够的空间。

左右两侧坐标轴标题#

Andrew Dawson 添加了使用新的关键字参数 loctitle() 在坐标轴顶部左右两侧添加标题的功能。

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

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.05。

字体 rcParams 的更改#

现在,font.* rcParams 仅影响在设置 rcParam 之后创建的文本对象,并且不会追溯影响已存在的文本对象。这使得它们的行为与大多数其他 rcParam 保持一致。

添加 savefig.jpeg_quality rcParam#

savefig.jpeg_quality rcParam 已添加,以便用户可以配置将图形保存为 JPEG 时使用的默认质量。默认质量为 95;以前的默认质量为 75。此更改最大限度地减少了 JPEG 图像固有的伪影,特别是对于像绘图那样颜色变化剧烈的图像。

后端#

WebAgg 后端#

Michael Droettboom、Phil Elson 及其他开发者开发了一个新的后端 WebAgg,用于在网页浏览器中显示图形。它支持动画,并且是完全交互式的。

../../_images/webagg_screenshot.png

matplotlib 的未来版本将把此后端与 IPython notebook 集成,以提供一个完全基于网页浏览器的绘图前端。

记住保存目录#

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

文档和示例#

Numpydoc 文档字符串#

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

示例重组#

Tony Yu 已开始将示例重新组织为更具意义的类别。新的图库页面是这项持续工作的成果。更多信息请参见 MEP12

示例现在使用 subplots()#

为了简洁明了,大多数 示例 现在使用更新的 subplots(),它在一个调用中创建一个图形和一个(或多个)坐标轴对象。旧方法涉及调用 figure(),然后进行一个(或多个) subplot() 调用。

基础设施#

清理工作#

一些在 1.2 或更早版本中已弃用,或长期未处于工作状态的功能已被移除。主要包括移除了 Qt 3 版本后端,以及 FltkAgg 和 Emf 后端。完整列表请参见 1.3.x 版本中的 API 更改

新的安装脚本#

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 进行控制。