Matplotlib 3.1 中的新特性 (2019 年 5 月 18 日)#

有关自上次修订以来的所有问题和 pull request 的列表,请参阅 3.10.0 的 GitHub 统计信息 (2024 年 12 月 13 日) .

新特性#

ConciseDateFormatter#

默认使用的自动日期格式化器可能非常冗长.可以访问一个新的格式化器,它尝试使刻度标签适当简洁.

(Source code, png)

辅助 x/y 轴支持#

一个新方法提供了通过 Axes.secondary_xaxisAxes.secondary_yaxis 向现有坐标轴添加第二个轴的能力.有关示例,请参见 次坐标轴 .

(Source code, png)

FuncScale 用于任意坐标轴比例#

添加了一个新的 FuncScale 类(以及 FuncTransform ),允许用户拥有任意比例变换,而无需编写 ScaleBase 的新子类.可以通过以下方式访问它:

ax.set_yscale('function', functions=(forward, inverse))

其中 forwardinverse 是返回比例变换及其逆变换的可调用对象.请参阅 标度 中的最后一个示例.

散点图的图例#

引入了一种为散点图创建图例的新方法.以前,为了获得 scatter() 图的图例,可以绘制几个散点,每个散点都有一个单独的标签,或者创建代理艺术家以手动显示在图例中.现在, PathCollection 提供了一个方法 legend_elements() ,以自动方式获取散点图的句柄和标签.这使得创建散点图的图例变得像

(Source code, png)

可以在 自动图例创建 中找到一个示例.

Matplotlib 不再需要在 MacOSX 后端上构建框架应用程序#

Matplotlib 的先前版本需要 Python 的 Framework 构建才能工作.应用程序类型已更新为不再需要此构建,因此 MacOSX 后端应与非框架 Python 一起工作.

这也为 PyPy3 添加了对 MacOSX 后端的支持.

Figure, FigureCanvas 和 Backends#

Figure.frameon 现在是 Figure 补丁可见性状态的直接代理#

访问 Figure.frameon (包括通过 get_frameonset_frameon ) 现在直接转发到底层 Rectangle artist 的可见性 ( Figure.patch.get_frameon , Figure.patch.set_frameon ).

pil_kwargs 参数已添加到 savefig#

Matplotlib 使用 Pillow 来处理保存为 JPEG 和 TIFF 格式. savefig() 函数获得了一个 pil_kwargs 关键字参数,该参数可用于将参数转发到 Pillow 的 PIL.Image.Image.save .

当保存为 PNG 时,也可以使用 pil_kwargs 参数. 在这种情况下,Matplotlib 也会使用 Pillow 的 PIL.Image.Image.save ,而不是通过它自己的内置 PNG 支持.

inaxes 方法添加到 FigureCanvasBase#

FigureCanvasBase 类现在有一个 inaxes 方法来检查一个点是否在 axes 中,并返回最顶层的 axes,否则返回 None.

cairo 后端默认为 pycairo 而不是 cairocffi#

这在某些情况下可以提高导入/运行时性能. 如果 pycairo 不可用,后端将回退到 cairocffi.

Axes and Artists#

axes_grid1 和 axisartist Axes 不再绘制两次 spines#

以前, axes_grid1axisartist Axes 的 spines 会被绘制两次,导致出现"粗体"外观. 现在不再是这种情况.

ArtistInspector.get_aliases 的返回类型已更改#

ArtistInspector.get_aliases 之前将别名集作为 {fullname: {alias1: None, alias2: None, ...}} 返回. dict-to-None 映射用于模拟早期 Python 版本中的集合. 现在它已被一个集合所取代,即 {fullname: {alias1, alias2, ...}} .

该值也存储在 ArtistInspector.aliasd 中,它也同样发生了变化.

ConnectionPatch 接受任意变换#

作为 "data""axes fraction" 等字符串的替代方案, ConnectionPatch 现在接受任何 Transform 作为 coordsA 和 coordsB 参数的输入. 这允许在不同用户定义的坐标系中定义的点之间绘制线条. 另请参阅 使用 ConnectionPatch .

mplot3d Line3D 现在允许 {set,get}_data_3d#

在 mplot3d 中使用 3d 投影创建的线现在可以使用 get_data_3d() 访问数据,该方法返回一个 array_likes 元组,其中包含 (x, y, z) 数据. 相应的 set_data_3d 可用于修改现有 Line3D 的数据.

Axes3D.voxels 现在对生成的体素进行着色#

Axes3D.voxels 方法现在接受一个 shade 参数,该参数默认为 True . 这会根据面的朝向对它们进行着色,其行为就像 plot_trisurf()bar3d() 的匹配参数一样. 下图显示了这如何影响输出.

(Source code, png)

Axis and Ticks#

添加了 Axis.get_invertedAxis.set_inverted#

Axis.get_invertedAxis.set_inverted 方法查询和设置轴是否使用"反转"方向(即,对于 x 轴向左增加,对于 y 轴向底部增加).

它们执行类似于 Axes.xaxis_inverted , Axes.yaxis_inverted , Axes.invert_xaxisAxes.invert_yaxis 的任务,但具体的区别在于, Axis.set_inverted 使得设置轴的反转更容易,无论它之前是否被反转过.

调整默认的次要刻度间距#

对于间隔 2.5 个单位的主要刻度,默认的次要刻度间距已从 0.625 更改为 0.5.

EngFormatter 现在接受 usetex, useMathText 作为仅关键字参数#

EngFormatter 中添加了一个公共 API,用于控制刻度标签中数字的呈现方式.默认情况下,useMathText 的值为 rcParams["axes.formatter.use_mathtext"] (default: False) ,usetex 的值为 rcParams["text.usetex"] (default: False) .

如果其中任何一个为 True ,则数字将被 $ 符号封装.使用 TeX 时,这意味着数字将以 TeX 的数学字体显示.使用 mathtext 时,数字周围的 $ 符号将确保 Unicode 渲染(如 mathtext 所暗示的那样).这将确保在使用 mathtext 时,刻度线中的负号呈现为 Unicode 负号 (U+2212)(而无需依赖 fix_minus 方法).

动画和交互性#

支持前进/后退鼠标按钮#

现在,Figure managers 为鼠标按钮支持一个 button_press 事件,类似于 key_press 事件.这允许将操作绑定到鼠标按钮(参见 MouseButton ).此机制的第一个应用是在使用 Qt5 后端创建的图形中支持前进/后退鼠标按钮.

save() 的 progress_callback 参数#

Animation.save 方法获得了一个可选的 progress_callback 参数,用于通知保存进度.

cache_frame_data 仅关键字参数添加到 animation.FuncAnimation#

默认情况下, matplotlib.animation.FuncAnimation 一直在缓存帧数据;但是,在某些情况下,这种缓存并不理想,例如,当 FuncAnimation 只需要以交互方式绘制(不保存)并且帧数据所需的内存非常大时.通过添加 cache_frame_data 仅关键字参数,用户现在可以禁用此缓存;因此,这个新参数为问题 #8528 提供了一个修复.

使用 PillowWriter 的无限循环 GIF#

我们承认大多数人希望多次观看 GIF.现在,使用 PillowWriter 将动画保存为 GIF 会生成一个无限循环的 GIF.

调整了 matplotlib.widgets.Slider 以具有垂直方向#

matplotlib.widgets.Slider 小部件现在接受一个可选参数 orientation,该参数指示滑块应采用的方向( 'horizontal''vertical' ).

改进了存在颜色条时光标下图像值的格式#

当存在颜色条时,它的格式化程序现在用于格式化鼠标光标下状态栏中的图像值.例如,对于显示值 10,000 和 10,001 的图像,状态栏现在(使用默认设置)将这些值显示为 1000010001 ),而之前这两个值都显示为 1e+04 .

MouseEvent button 属性现在是一个 IntEnum#

MouseEvent 实例的 button 属性可以采用值 None,1(左键),2(中键),3(右键),"up"(滚动)和 "down"(滚动).为了更好的可读性,1,2 和 3 值现在使用 enum.IntEnummatplotlib.backend_bases.MouseButton 表示,其值为 MouseButton.LEFT ( == 1 ), MouseButton.MIDDLE ( == 2 ) 和 MouseButton.RIGHT ( == 3 ).

配置,安装和开发#

MATPLOTLIBRC 环境变量现在可以指向任何"文件"路径#

这包括设备文件;特别是,在 Unix 系统上,可以将 MATPLOTLIBRC 设置为 /dev/null 以忽略用户的 matplotlibrc 文件并回退到 Matplotlib 的默认设置.

提醒一下,如果 MATPLOTLIBRC 指向一个目录,Matplotlib 将尝试从 $MATPLOTLIBRC/matplotlibrc 加载 matplotlibrc 文件.

允许在 MATPLOTLIBRC 文件中使用 LaTeX 代码 pgf.preambletext.latex.preamble#

以前,rc 文件键 rcParams["pgf.preamble"] (default: '') 和 rcParams["text.latex.preamble"] (default: '') 使用逗号作为分隔符进行解析.这会破坏有效的 LaTeX 代码,例如:

\usepackage[protrusion=true, expansion=false]{microtype}

解析已修改为将完整的行传递给 LaTeX 系统,保留所有逗号.从 Python 脚本中传递字符串列表仍然像以前一样工作.

新的日志 API#

可以调用 matplotlib.set_loglevel / pyplot.set_loglevel 来显示更详细(或更少)的日志输出.