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 版本进行了以下更改。
增强功能#
添加了用于创建多页 PDF 的上下文管理器(参见
matplotlib.backends.backend_pdf.PdfPages)。WebAgg 后端现在在异构互联网连接下应具有更低的延迟。
错误修复#
直方图绘图现在包含末端线条。
修复了 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() 单独修改每个艺术家的草图参数。
更新了 Axes3D.contour 方法#
Damon McDougall 更新了 tricontour() 和 tricontourf() 方法,允许在任意非结构化用户指定三角剖分上进行 3D 等高线绘图。
新的 eventplot 绘图类型#
Todd Jennings 添加了一个 eventplot() 函数,用于创建多行或多列相同的线段。
作为该功能的一部分,引入了一个新的 EventCollection 类,允许绘制和操作多行或多列相同的线段。
三角网格插值#
Geoffroy Billotey 和 Ian Thomas 添加了用于在三角网格内进行插值的类:(LinearTriInterpolator 和 CubicTriInterpolator)以及一个用于查找点所在三角形的工具类(TrapezoidMapTriFinder)。还添加了一个用于执行网格细化和平滑等高线的辅助类(UniformTriRefiner)。最后,添加了一个实现三角网格改进基本工具的类(TriAnalyzer)。
stackplot 的基准线#
Till Stensitzki 为 stackplot() 添加了非零基准线,它们可以是对称的或加权的。
矩形颜色条扩展#
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,路径效果现在也适用于绘图线条。
更容易为色阶创建颜色映射和归一化器#
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.xmargin 和 axes.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 浏览器中显示图形。它不仅支持动画,还具有完全的交互性。
未来的 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 和安装程序本身中附带的依赖项减少了。值得注意的是,pytz、dateutil、pyparsing 和 six 不再包含在 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 进行控制。