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 中使用的默认分箱数。它可以是一个 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),除非它们跨越一个相对较大的十的幂的倍数,在这种情况下,选择该倍数(例如 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——但包含了更广泛的字符范围。

默认的数学文本字体已从 Computer Modern 更改为 DejaVu 家族,以与常规文本保持一致。mathtext.fontset 配置参数新增了两个选项:dejavusans(默认)和 dejavuserif。这两个选项都尽可能使用 DejaVu 字形,当 DejaVu 中找不到字形时,会回退到 STIX 符号。要恢复到之前的行为,请将 rcParam mathtext.fontset 设置为 cm

更快的文本渲染#

在 Agg 后端渲染文本现在模糊度降低,绘图速度提高了约 20%。

对 Qt 图表选项编辑器的改进#

Qt 图表选项编辑器实现了多项可用性改进,其中包括

  • 线条样式条目现在已排序且无重复。

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

  • 浮点值的行编辑现在仅显示必要的位数以避免精度损失。还修复了一个重要错误,该错误涉及使用 Qt5 和小数分隔符为“,”的区域设置进行输入验证时的问题。

  • 轴选择器现在使用更短、更友好的轴名称,并且在没有轴时不会崩溃。

  • 使用默认标签("_lineX", "_imageX")的线条和图像条目现在即使条目超过 10 个,也会按数字排序。

改进的图像支持#

在 2.0 版本之前,Matplotlib 通过首先应用色图,然后调整结果大小来重新采样图像。由于重新采样是在彩色图像上执行的,这会在输出图像中引入实际色图中不存在的颜色。现在,图像首先进行重新采样(如果输入图像是浮点数,则完全以浮点数进行),然后应用色图。

为了实现这一重要改变,图像处理代码几乎完全重写。作为一个附带影响,图像重新采样比以前使用更少的内存和更少的数据类型转换。

通过设置私有成员 _image_skew_coordinate 来“倾斜”图像的实验性私有功能已移除。取而代之的是,图像将遵循它们所绘制的轴的变换。

图像绘图上的非线性刻度#

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

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

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

这可以通过类比绘制一个具有线性间隔分箱和对数 x 轴的直方图来理解。等大小的分箱在 x 值较小时会显示为更宽,在 x 值较大时会显示为更窄。

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

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

默认动画编解码器更改#

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

动画中 mencoder 支持已弃用#

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

箱线图 Zorder 关键字参数#

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

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

填充的 +x 标记#

新增了可填充的 plusx 标记。请参见 markers 模块和标记参考示例。

用于 plot_surfacercountccount#

从 v2.0 开始,mplot3d 的 plot_surface 现在接受 rcountccount 参数,用于控制绘图输入数据的采样。这些参数指定从输入数据中获取的均匀间隔样本的最大数量。这些参数也是该函数新的默认采样方法,并被视为一种样式更改。

旧的 rstridecstride 参数,用于指定均匀间隔样本的大小,在调用“经典”模式时成为默认值,并且仍然可用。目前没有计划弃用这些参数。

Streamplot Zorder 关键字参数更改#

streamplotzorder 参数现在默认值为 None 而非 2。如果 zorder 设为 None,则 streamplot 的默认 zordermatplotlib.lines.Line2D.zorder

扩展到 matplotlib.backend_bases.GraphicsContextBase#

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

如果您维护一个扩展 GraphicsContextBase 的第三方后端,此方法现在可供您使用,并且应该用于为填充图案着色。