Matplotlib 3.1 的新功能 (2019年5月18日)#

要查看自上次修订以来的所有问题和拉取请求列表,请参阅 GitHub 统计数据为 3.9.2 版本(2024年8月12日)

新功能#

ConciseDateFormatter#

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

(Source code, 2x.png, png)

次要 x/y 轴支持#

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

(Source code, 2x.png, png)

FuncScale 用于任意轴的刻度#

新增了一个 FuncScale 类(以及 FuncTransform),允许用户在不编写 ScaleBase 的新子类的情况下进行任意的尺度变换。可以通过以下方式访问::

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

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

散点图图例#

为散点图创建图例的新方法已被引入。以前,为了获得 scatter() 图的图例,人们要么绘制多个散点图,每个散点图都有单独的标签,要么手动创建代理艺术家以在图例中显示。现在,PathCollection 提供了一个方法 legend_elements() 来自动获取散点图的句柄和标签。这使得为散点图创建图例变得非常简单。

(Source code, 2x.png, png)

示例可以在 自动图例创建 中找到。

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

matplotlib 的早期版本需要一个框架构建的 Python 才能工作。应用程序类型已更新,不再需要此要求,因此 MacOSX 后端应该可以在非框架 Python 上工作。

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

图、画布和后端#

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

访问 Figure.frameon (包括通过 get_frameonset_frameon )现在直接转发到底层矩形艺术家 (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支持。

FigureCanvasBase 添加 inaxes 方法#

FigureCanvasBase 类现在有一个 inaxes 方法,用于检查一个点是否在轴内并返回最顶层的轴,否则返回 None。

cairo 后端默认使用 pycairo 而不是 cairocffi#

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

坐标轴和艺术家#

axes_grid1 和 axisartist 轴不再绘制两次脊线#

之前,axes_grid1axisartist Axes 的脊柱会被绘制两次,导致出现“加粗”的外观。现在不再是这种情况。

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

ArtistInspector.get_aliases 以前返回的别名集合为 {fullname: {alias1: None, alias2: None, ...}}。在早期版本的 Python 中,字典到 None 的映射用于模拟集合。现在它已被集合取代,即 {fullname: {alias1, alias2, ...}}

此值也存储在 ArtistInspector.aliasd 中,该值同样已更改。

ConnectionPatch 接受任意变换#

除了像 "data""axes fraction" 这样的字符串,ConnectionPatch 现在接受任何 Transform 作为 coordsAcoordsB 参数的输入。这允许在不同用户定义的坐标系中定义的点之间绘制线条。另请参见 使用 ConnectionPatch

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

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

Axes3D.voxels 现在为生成的体素添加了阴影效果#

Axes3D.voxels 方法现在接受一个默认值为 Trueshade 参数。这个参数根据面的方向进行着色,其行为与 plot_trisurf()bar3d() 的相应参数相同。下图展示了这对输出的影响。

(Source code, 2x.png, png)

轴与刻度#

添加了 Axis.get_invertedAxis.set_inverted#

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

它们执行的任务类似于 Axes.xaxis_invertedAxes.yaxis_invertedAxes.invert_xaxisAxes.invert_yaxis,具体区别在于 Axis.set_inverted 使得无论轴是否之前已被反转,设置轴的反转都更加容易。

调整默认次刻度间距#

默认的次要刻度间距从0.625改为0.5,适用于主刻度间距为2.5单位的情况。

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

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

如果其中任何一个为 True,那么数字将被 $ 符号包围。在使用 TeX 时,这意味着数字将以 TeX 的数学字体显示。在使用 mathtext 时,数字周围的 $ 符号将确保 Unicode 渲染(如 mathtext 所暗示的)。这将确保在使用 mathtext 时,刻度中的减号被渲染为 Unicode 减号(U+2212)(不依赖于 fix_minus 方法)。

动画与交互性#

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

图表管理器现在支持鼠标按钮的 button_press 事件,类似于 key_press 事件。这允许将操作绑定到鼠标按钮(参见 MouseButton)。该机制的首次应用是在使用 Qt5 后端创建的图表中支持前进/后退鼠标按钮。

progress_callback 参数用于 save()#

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

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

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的图像,状态栏现在(使用默认设置)将这些值显示为``10000``和``10001``,而之前这两个值都显示为``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 可以被调用来显示更多(或更少)详细的日志输出。