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
将 svg.hashsalt
键添加到 rcParams#
如果 svg.hashsalt
为 None
(默认情况下是这样),则 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
重现,如右侧所示。
这可以通过类比在对数 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
标记#
plot_surface
的 *rcount* 和 *ccount*#
从 v2.0 开始,mplot3d 的 plot_surface
现在接受 *rcount* 和 *ccount* 参数,用于控制用于绘图的输入数据的采样。这些参数指定从输入数据中提取的最大等间隔样本数。这些参数也是该函数新的默认采样方法,并且被认为是样式更改。
当调用“经典”模式时,旧的 *rstride* 和 *cstride* 参数(指定等间隔样本的大小)成为默认值,并且仍然可用。没有计划弃用这些参数。
Streamplot Zorder 关键字参数更改#
streamplot
的 zorder
参数现在具有默认值 None
而不是 2
。如果 None
作为 zorder
给出,streamplot
的默认 zorder
为 matplotlib.lines.Line2D.zorder
。
扩展到 matplotlib.backend_bases.GraphicsContextBase
#
为了支持在后端标准化阴影线行为,我们将 matplotlib.backend_bases.GraphicsContextBase.get_hatch_color
方法添加到 matplotlib.backend_bases.GraphicsContextBase
。这仅在我们提供的后端中的渲染过程中使用,因此不会破坏任何第三方后端。
如果您维护扩展 GraphicsContextBase
的第三方后端,则此方法现在可用,并应用于为阴影线图案着色。