Matplotlib 3.1的新增功能

有关自上次修订以来的所有问题和请求的列表,请参阅 GitHub 统计 .

新特点

ConciseDateFormatter

默认情况下使用的自动日期格式化程序可能非常冗长。可以访问一个新的格式化程序,它试图使刻度标签适当简洁。

(Source code _, pngpdf

../../_images/whats_new_3-1-0-1.png

辅助x/y轴支撑

新方法提供了通过将第二个轴添加到现有轴的功能 Axes.secondary_xaxisAxes.secondary_yaxis . 见 次轴 举个例子。

(Source code _, pngpdf

../../_images/whats_new_3-1-0-2.png

FuncScale 对于任意轴比例

一个新的 FuncScale 添加了类(和 FuncTransform )允许用户无需编写新的 ScaleBase . 可通过以下方式访问:

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

在哪里? forwardinverse 是返回比例变换及其倒数的可调用项。请参见中的最后一个示例 规模 .

散点图例

介绍了一种创建散点图图例的新方法。以前,为了获得一个 scatter() 绘图,可以绘制多个散点,每个散点都有一个单独的标签,也可以创建代理美工器以手动显示在图例中。现在, PathCollection 提供一个方法 legend_elements() 以自动方式获取散点图的句柄和标签。这使得为散点图创建图例非常简单

(Source code _, pngpdf

../../_images/whats_new_3-1-0-3.png

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

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

matplotlib的早期版本需要python框架构建才能工作。应用程序类型已更新为不再需要此项,因此MacOSX后端应该与非框架python一起工作。

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

Figure、FigureCanvas和后端

图.frameon现在是图形修补程序可见性状态的直接代理

访问 Figure.frameon (包括via get_frameonset_frameon 现在直接转到底层矩形艺术家的可见性 (Figure.patch.get_frameonFigure.patch.set_frameon

pil_kwargs 添加到savefig的参数

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

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

添加 inaxes 方法到 FigureCanvasBase

这个 FigureCanvasBase 班级现在有一个 inaxes 方法检查某个点是否在轴中,并返回最顶端的轴,否则返回无。

cairo后端默认为pycairo而不是cairoffi

在某些情况下,这会导致更快的导入/运行时性能。如果pycairo不可用,后端将回到cairoffi。

斧头和艺术家

轴网格1和轴对称轴不再绘制两次脊椎

以前,脊椎 axes_grid1axisartist 轴将被绘制两次,导致一个“大胆”的外观。情况不再是这样了。

artistinspector.get_别名的返回类型已更改

ArtistInspector.get_aliases 以前返回的别名集为 {{fullname: {{alias1: None, alias2: None, ...}}}} . dict-to-none映射用于模拟早期版本的Python中的集合。它现在已经被一套替换了,即 {{fullname: {{alias1, alias2, ...}}}} .

此值也存储在 ArtistInspector.aliasd 也发生了同样的变化。

ConnectionPatch 接受任意变换

或者像 "data""axes fraction"ConnectionPatch 现在接受任何 Transform 作为输入 科尔达科尔多斯 论据。这允许在不同用户定义的坐标系中定义的点之间绘制线。另请参见 Connect Simple01 example .

mplot3d Line3D现在允许{set,get}u data_3d

使用mplot3d中的3d投影创建的线现在可以使用 get_data_3d() 它返回包含(x,y,z)数据的array_likes元组。相当于 set_data_3d 可用于修改现有Line3D的数据。

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

这个 Axes3D.voxels 方法现在采用 阴影 默认为的参数 True . 这将根据面方向对面进行着色,其行为与匹配参数的行为类似 plot_trisurf()bar3d() . 下面的图显示了这如何影响输出。

(Source code _, pngpdf

../../_images/whats_new_3-1-0-4.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 使设置轴的反转更容易,而不管它以前是否反转过。

调整默认次要刻度间距

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

EngFormatter 现在接受 用语用语文本 仅作为关键字参数

已将公共API添加到 EngFormatter 控制如何呈现ticklabels中的数字。默认情况下, 用语文本 评估为 rcParams["axes.formatter.use_mathtext'"]用语 评估为 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 用于通知保存进度的参数。

添加 cache_frame_data 只包含关键字的参数 animation.FuncAnimation

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

无止境循环礼品与枕头作家

我们承认,大多数人想看GIF不止一次。使用PillowWriter将动画保存为GIF现在会生成一个无休止的循环GIF。

调整的 matplotlib.widgets.Slider 垂直定向

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

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

当一个colorbar出现时,它的格式化程序现在被用来格式化状态栏中鼠标光标下的图像值。例如,对于显示值10000和10001的图像,状态栏现在(使用默认设置)将值显示为 1000010001 ),而这两个值以前都显示为 1e+04 .

MouseEvent按钮属性现在是IntEnum

The button attribute of MouseEvent instances can take the values None, 1 (left button), 2 (middle button), 3 (right button), "up" (scroll), and "down" (scroll). For better legibility, the 1, 2, and 3 values are now represented using the enum.IntEnum class matplotlib.backend_bases.MouseButton, with the values MouseButton.LEFT (== 1), MouseButton.MIDDLE (== 2), and MouseButton.RIGHT (== 3).

配置、安装和开发

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

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

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

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

以前,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 可以调用以显示更多(或更少)详细的日志记录输出。