Matplotlib 2.0 新特性 (2017 年 1 月 17 日)#

注意

Matplotlib 2.0 支持 Python 2.7 和 3.4+

默认样式更改#

v2.0 的主要更改与彻底修改默认样式有关。

改进的颜色转换 API 和 RGBA 支持#

colors 模块获得了一个新的颜色转换 API,完全支持 alpha 通道。 主要的公共函数是 is_color_like()matplotlib.colors.to_rgba()matplotlib.colors.to_rgba_array()to_hex()。RGBA 四元组以 "#rrggbbaa" 的十六进制格式编码。

一个附带的好处是,Qt 选项编辑器现在也允许设置艺术家的 alpha 通道。

新的配置 (rcParams)#

添加了新的 rcparams

参数

描述

rcParams["date.autoformatter.year"] (默认值: '%Y')

“年”刻度日期的格式字符串

rcParams["date.autoformatter.month"] (默认值: '%Y-%m')

“月”刻度日期的格式字符串

rcParams["date.autoformatter.day"] (默认值: '%Y-%m-%d')

“天”刻度日期的格式字符串

rcParams["date.autoformatter.hour"] (默认值: '%m-%d %H')

“小时”刻度时间的格式字符串

rcParams["date.autoformatter.minute"] (默认值: '%d %H:%M')

“分钟”刻度时间的格式字符串

rcParams["date.autoformatter.second"] (默认值: '%H:%M:%S')

用于 '秒' 刻度时间的格式化字符串

rcParams["date.autoformatter.microsecond"] (默认值: '%M:%S.%f')

用于 '微秒' 刻度时间的格式化字符串

rcParams["scatter.marker"] (默认值: 'o')

散点图的默认标记

rcParams["svg.hashsalt"] (默认值: None)

请参阅说明

rcParams["xtick.top"] (默认值: False), rcParams["xtick.major.top"] (默认值: True) rcParams["xtick.minor.top"] (默认值: True), rcParams["xtick.bottom"] (默认值: True), rcParams["xtick.major.bottom"] (默认值: True) rcParams["xtick.minor.bottom"] (默认值: True), rcParams["ytick.left"] (默认值: True), rcParams["ytick.minor.left"] (默认值: True), rcParams["ytick.major.left"] (默认值: True) rcParams["ytick.right"] (默认值: False), rcParams["ytick.minor.right"] (默认值: True), rcParams["ytick.major.right"] (默认值: True)

控制主刻度和次刻度的绘制位置。全局值与相应的主/次值进行and运算。相应的主/次值。

rcParams["hist.bins"] (默认值: 10)

hist 中使用的默认 bin 数量。 这可以是一个 int,一个浮点数列表,或者如果安装了 numpy >= 1.11,则为 'auto'

rcParams["lines.scale_dashes"] (默认值: True)

线条虚线模式是否应随线宽缩放。

rcParams["axes.formatter.offset_threshold"] (默认值: 4)

触发使用偏移量的刻度标签中保存的最小位数。

svg.hashsalt 键添加到 rcParams#

如果 svg.hashsaltNone(默认情况下是这样),则 svg 后端使用 uuid4 生成哈希盐。 如果它不是 None,则它必须是一个字符串,该字符串用作哈希盐而不是 uuid4。这允许确定性的 SVG 输出。

删除了 svg.image_noscale rcParam#

由于图像处理的广泛更改,svg.image_noscale rcParam 已被删除。 可以通过在各个图像上设置 interpolation='none' 或全局使用 image.interpolation rcParam 来实现相同的功能。

定性色彩映射#

ColorBrewer 的 “定性” 色彩映射(“Accent”,“Dark2”,“Paired”,“Pastel1”,“Pastel2”,“Set1”,“Set2”,“Set3”)旨在用于离散的类别数据,没有值的含义,因此已转换为 ListedColormap 而不是 LinearSegmentedColormap,因此颜色将不再被插值,并且它们可以用于等值线图,标记的图像特征等。

轴偏移标签现在响应 *labelcolor*#

当 *labelcolor* 更改时,轴偏移标签现在与轴刻度标记的颜色相同。

改进的偏移文本选择#

默认的偏移文本选择已更改为仅使用所有刻度都通用的有效数字(例如,1231..1239 -> 1230,而不是 1231),除非它们跨越了 10 的幂的相对较大的倍数,在这种情况下,将选择该倍数(例如,1999..2001->2000)。

样式参数黑名单#

为了防止使用样式产生意外后果,样式文件不再能够设置影响与样式无关的参数。 这些参数包括

'interactive', 'backend', 'backend.qt4', 'webagg.port',
'webagg.port_retries', 'webagg.open_in_browser', 'backend_fallback',
'toolbar', 'timezone', 'datapath', 'figure.max_open_warning',
'savefig.directory', 'tk.window_focus', 'docstring.hardcopy'

默认字体更改#

matplotlib 在文本中使用的默认字体已更改为无衬线系列的 DejaVu Sans 和衬线系列的 DejaVu Serif。 DejaVu 字体系列基于先前的 matplotlib 默认字体 --Bitstream Vera--,但包括更广泛的字符范围。

默认的 mathtext 字体已从 Computer Modern 更改为 DejaVu 系列,以保持与常规文本的一致性。 已为 mathtext.fontset 配置参数添加了两个新选项:dejavusans(默认)和 dejavuserif。 这两个选项都尽可能使用 DejaVu 字形,并在 DejaVu 中找不到字形时回退到 STIX 符号。 要返回到先前的行为,请将 rcParam mathtext.fontset 设置为 cm

更快的文本渲染#

现在,在 Agg 后端渲染文本不再模糊,并且绘制速度提高了约 20%。

Qt 图形选项编辑器的改进#

为 Qt 图形选项编辑器实施了各种可用性改进,其中包括

  • 现在,线条样式条目已排序,没有重复项。

  • 现在可以为图像设置颜色映射和归一化限制。

  • 浮点值的行编辑现在仅显示避免精度损失所需的尽可能多的位数。 还修复了一个重要的错误,该错误与使用 Qt5 和小数分隔符为“,”的区域设置进行输入验证有关。

  • 现在,轴选择器对轴使用更短,更用户友好的名称,并且如果没有轴,则不会崩溃。

  • 即使有 10 个以上的条目,使用默认标签(“_lineX”,“_imageX”)的行和图像条目现在也按数值排序。

改进的图像支持#

在 2.0 版本之前,matplotlib 对图像进行重采样时,会先应用颜色映射,然后再调整结果大小。由于重采样是在着色后的图像上执行的,这会在输出图像中引入颜色映射中实际不存在的颜色。现在,图像会先进行重采样(如果输入图像是浮点数,则完全以浮点数形式进行),然后再应用颜色映射。

为了进行这个重要的更改,图像处理代码几乎被完全重写。作为副作用,图像重采样使用的内存和数据类型转换比以前更少。

通过设置私有成员 _image_skew_coordinate 来“倾斜”图像的实验性私有功能已被删除。现在,图像将遵守绘制它们的轴的变换。

图像图上的非线性刻度#

imshow 现在会在应用非线性刻度后,在数据空间中请求的点处绘制数据。

左侧的图像展示了新的、正确的行为。旧的行为可以使用 pcolormesh 重现,如右侧所示。

(源代码, 2x.png, png)

这可以通过类比在对数 x 轴上绘制具有线性间隔 bin 的直方图来理解。等大小的 bin 在较小的 *x* 值处显示为较宽,在较大的 *x* 值处显示为较窄。

在 NbAgg 和 WebAgg 后端中支持 HiDPI (Retina) 显示器#

NbAgg 和 WebAgg 后端现在将使用高像素密度显示器的完整分辨率。

默认动画编解码器更改#

默认动画编解码器已从 mpeg4 更改为更高效的 h264。可以通过 animation.codec rcParam 进行设置。

动画中对 mencoder 的已弃用支持#

使用 mpl 写入视频文件时使用 mencoder 是有问题的;强烈建议切换到 ffmpeg。对 mencoder 的所有支持将在 2.2 版本中删除。

箱线图 Zorder 关键字参数#

boxplot 现在存在 *zorder* 参数。这允许在绘图函数调用中设置箱线图的 zorder。

boxplot(np.arange(10), zorder=10)

填充的 +x 标记#

添加了新的可填充的*加号*和*x*标记。请参阅 markers 模块和 标记参考 示例。

plot_surface 的 *rcount* 和 *ccount*#

从 v2.0 开始,mplot3d 的 plot_surface 现在接受 *rcount* 和 *ccount* 参数,用于控制用于绘图的输入数据的采样。这些参数指定从输入数据中提取的最大等间隔样本数。这些参数也是该函数新的默认采样方法,并且被认为是样式更改。

当调用“经典”模式时,旧的 *rstride* 和 *cstride* 参数(指定等间隔样本的大小)成为默认值,并且仍然可用。没有计划弃用这些参数。

Streamplot Zorder 关键字参数更改#

streamplotzorder 参数现在具有默认值 None 而不是 2。如果 None 作为 zorder 给出,streamplot 的默认 zordermatplotlib.lines.Line2D.zorder

扩展到 matplotlib.backend_bases.GraphicsContextBase#

为了支持在后端标准化阴影线行为,我们将 matplotlib.backend_bases.GraphicsContextBase.get_hatch_color 方法添加到 matplotlib.backend_bases.GraphicsContextBase。这仅在我们提供的后端中的渲染过程中使用,因此不会破坏任何第三方后端。

如果您维护扩展 GraphicsContextBase 的第三方后端,则此方法现在可用,并应用于为阴影线图案着色。