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投影。

  • 处理来自Microsoft的最新字体和带有非ascii元数据的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-style 草图绘图模式。要使用它,只需在创建图表之前调用 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

堆叠图的基线#

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,现在会考虑图表上的*所有*艺术家——之前并非如此,这导致了一些不符合预期的边缘情况。

初始化一个旋转矩形#

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

文本#

锚定文本支持#

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

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

文本的垂直对齐现在在各个后端之间是一致的。您可能会注意到文本位置有微小的差异,特别是在旋转文本时。

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

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

左右侧轴标题#

Andrew Dawson 添加了使用新的关键字参数 loc 将轴标题与轴顶部的左右两侧对齐的功能,该功能通过 title() 实现。

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

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"] (default: 0.05) 和 rcParams["axes.ymargin"] (default: 0.05) 被添加来配置默认使用的边距。之前它们被硬编码为默认值为0,这两个rcParam值的默认值都是0。

字体 rcParams 的更改#

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

添加了 rcParams["savefig.jpeg_quality"]#

添加了 rcParam 值 rcParams["savefig.jpeg_quality"],以便用户可以配置将图形写为 JPEG 时使用的默认质量。默认质量为 95;之前,默认质量为 75。此更改减少了 JPEG 图像固有的伪影,特别是对于颜色变化明显的图像,如绘图通常所见。

后端#

WebAgg 后端#

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

../../_images/webagg_screenshot.png

matplotlib 的未来版本将把这个后端与 IPython notebook 集成,以实现完全基于 Web 浏览器的绘图前端。

记住保存目录#

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

文档和示例#

Numpydoc 文档字符串#

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

示例重新组织#

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

示例现在使用 subplots()#

为了简洁和清晰起见,大多数 示例 现在使用较新的 subplots() ,它在一个调用中创建一个图形和一个(或多个)轴对象。旧的方法涉及调用 figure() ,随后是一个(或多个) subplot() 调用。

基础设施#

大扫除#

toctree 是一个 reStructuredText 的 指令,一个非常通用的标记片段。指令可以有参数、选项和内容。

新设置脚本#

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 来控制确切的数字。