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 选项编辑器现在也允许设置图形元素 (artists) 的 Alpha 通道。

新的配置 (rcParams)#

新增的 rcparams

参数

描述

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

'year'(年)刻度日期的格式字符串

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

'month'(月)刻度日期的格式字符串

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

'day'(日)刻度日期的格式字符串

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

'hour'(小时)刻度时间的格式字符串

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

'minute'(分钟)刻度时间的格式字符串

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

'second'(秒)刻度时间的格式字符串

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

'microsecond'(微秒)刻度时间的格式字符串

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

散点图的默认标记

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

参见说明

(此处列出各刻度配置参数,如 xtick.top, ytick.left 等)控制主刻度和次刻度的绘制位置。全局值与相应的主/次值进行“与”逻辑运算。

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

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

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

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

线型虚线图案是否应随线宽缩放。

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

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

在 rcParams 中添加了 svg.hashsalt#

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

移除了 svg.image_noscale rcParam#

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

定性颜色映射 (Qualitative colormaps)#

ColorBrewer 的“定性”颜色映射("Accent", "Dark2", "Paired", "Pastel1", "Pastel2", "Set1", "Set2", "Set3")旨在用于离散分类数据,不含数值含义,因此它们已转换为 ListedColormap 而非 LinearSegmentedColormap,以便颜色不再被插值,可用于区域统计图、标注图像特征等。

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

当修改 labelcolor 时,坐标轴偏移标签现在的颜色与坐标轴刻度标记保持一致。

改进的偏移文本选择#

默认的偏移文本选择已更改为仅使用所有刻度共有的有效数字,除非跨越了十的幂的较大倍数(此时选择该倍数,例如 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 字形,并在未找到字形时回退到 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 编写视频文件存在问题;强烈建议切换到 ffmpeg。对 mencoder 的所有支持将在 2.2 版本中移除。

箱线图 (Boxplot) 的 Zorder 关键字参数#

boxplot 现在支持 zorder 参数。这允许在绘图函数调用中设置箱线图的层级 (zorder)。

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

填充的 +x 标记#

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

plot_surfacercountccount 参数#

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

旧的 rstridecstride 参数(指定均匀采样的步长)在启用 'classic' 模式时成为默认值,并且仍然可以使用。目前没有弃用这些参数的计划。

流图 (Streamplot) 的 Zorder 关键字参数更改#

streamplotzorder 参数现在的默认值为 None 而不是 2。如果将 None 作为 zorder 传递,streamplot 将拥有默认的 zordermatplotlib.lines.Line2D.zorder

matplotlib.backend_bases.GraphicsContextBase 的扩展#

为了支持在各后端中统一填充图案的行为,向 matplotlib.backend_bases.GraphicsContextBase 添加了 get_hatch_color 方法。这仅在我们分发的后端渲染过程中使用,因此不会破坏任何第三方后端。

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