Matplotlib 3.0 中的新功能 (2018 年 9 月 18 日)#

改进了默认后端选择#

默认后端不再必须设置为构建过程的一部分.相反,在运行时,按顺序尝试内置后端,直到其中一个导入为止.

无头 Linux 服务器(由未定义 DISPLAY 环境变量标识)将不会选择 GUI 后端.

循环色彩映射表#

添加了两个新的色彩映射表,名为"twilight"和"twilight_shifted".这些色彩映射表以相同的颜色开始和结束,并且具有两个对称的,亮度相等的半部分,但是颜色是发散的.由于它们会环绕,因此它们非常适合于循环数据,例如相位角,罗盘方向或一天中的时间.与 viridis 和 cividis 一样,twilight 在感知上是均匀的,并且对色盲友好.

能够按固定的数量级缩放轴#

要按固定的数量级缩放轴,请将 Axes.ticklabel_format 的 scilimits 参数设置为相同(非零)的上下限.例如,要将 y 轴缩放一百万 (1e6),请使用

ax.ticklabel_format(style='sci', scilimits=(6, 6), axis='y')

scilimits=(0, 0) 的行为没有改变.使用此设置,Matplotlib 将根据轴值调整数量级,而不是保持固定.以前,设置 scilimits=(m, m) 等同于设置 scilimits=(0, 0) .

向 mpl_toolkits 添加 AnchoredDirectionArrows 功能#

一个新的 mpl_toolkits 类 AnchoredDirectionArrows 绘制一对正交箭头,以指示 2D 图上的方向.一个最小的工作示例接收坐标系的变换对象(通常为 ax.transAxes)和箭头标签.有几个可选参数可用于更改布局.例如,可以旋转箭头对并且可以更改颜色.默认情况下,标签和箭头具有相同的颜色,但该类也可以传递参数以自定义箭头和文本布局,这些参数传递给 matplotlib.textpath.TextPathmatplotlib.patches.FancyArrowPatch .可以调整箭头尾部和头部的位置,长度和宽度,方向箭头和标签可以有框架.可以调整填充和间距参数.

为 colorbar 添加 minorticks_on()/off() 方法#

一个新的方法 ColorbarBase.minorticks_on 已被添加,以正确显示 colorbar 上的小刻度.当 extend 关键字参数(在创建 colorbar 时使用)设置为"both","max"或"min"时,此方法不允许小刻度延伸到 vmin 和 vmax 之外的区域.还添加了一个补充方法 ColorbarBase.minorticks_off ,用于删除 colorbar 上的小刻度.

Colorbar 刻度现在可以是自动的#

以前放置在 colorbar 上的刻度数量适用于大型 colorbar,但如果 colorbar 被缩小(即通过 shrink 关键字参数),则看起来很糟糕.现在已更改,以便刻度数量现在可以响应 colorbar 的大小.

不要自动重命名重复的文件名#

以前,当使用 GUI 的保存对话框将图形保存到文件时,如果默认文件名(基于图形窗口标题)已存在于磁盘上,Matplotlib 将附加一个后缀(例如 Figure_1-1.png ),从而阻止对话框提示覆盖该文件.此行为已被删除.现在,如果文件名存在于磁盘上,则会提示用户是否覆盖它.这消除了猜测,并允许有意覆盖,尤其是在使用 figure.canvas.set_window_title() 手动设置图形名称时.

Legend 现在具有 title_fontsize 关键字参数(和 rcParam)#

Figure.legendAxes.legend 的标题现在可以通过 title_fontsize 关键字参数设置其字体大小.还有一个新的 rcParams["legend.title_fontsize"] (default: None) .两者都默认为 None ,这意味着图例标题将具有与轴默认字体大小相同的字体大小(而不是图例字体大小,由 fontsize 关键字参数或 rcParams["legend.fontsize"] (default: 'medium') 设置).

支持 rParams 中 axes.prop_cycle 属性 markevery#

Matplotlib rcParams 设置对象现在支持使用 markevery Line2D 对象属性的循环器配置 rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) 属性.

pgf 后端的多页 PDF 支持#

pgf 后端现在还支持多页 PDF 文件.

from matplotlib.backends.backend_pgf import PdfPages
import matplotlib.pyplot as plt

with PdfPages('multipage.pdf') as pdf:
    # page 1
    plt.plot([2, 1, 3])
    pdf.savefig()

    # page 2
    plt.cla()
    plt.plot([3, 1, 2])
    pdf.savefig()

饼图现在默认是圆形的#

我们承认大多数人不喜欢椭圆形的饼图.因此,绘制饼图的轴默认设置为具有相等的纵横比.这确保了饼图看起来是圆形的,与轴的大小或单位无关.要恢复到以前的行为,请使用 ax.set_aspect("auto")plt.axis("auto") 将轴的纵横比设置为自动.

ax.get_gridspec 添加到 SubplotBase#

添加了新的方法 SubplotBase.get_gridspec ,以便用户可以轻松获取用于创建轴的 gridspec:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(3, 2)
gs = axs[0, -1].get_gridspec()

# remove the last column
for ax in axs[:,-1].flatten():
  ax.remove()

# make a subplot in last column that spans rows.
ax = fig.add_subplot(gs[:, -1])
plt.show()

轴标题将不再与 xaxis 重叠#

以前,如果 xaxis 重叠(通常 xaxis 位于轴的顶部),则必须手动移动轴标题.现在,如果标题位于顶部,则标题将自动移动到 xaxis 及其装饰器(包括 xlabel)之上.

如果需要,仍然可以手动放置标题.有一个小技巧;该算法检查标题的 y 位置是否为 1.0(默认值),如果是,则移动.如果用户将标题放置在默认位置(即 ax.title.set_position(0.5, 1.0) ),则标题仍将移动到 xaxis 之上.如果用户想要避免这种情况,他们可以指定一个接近的数字(即 ax.title.set_position(0.5, 1.01) ),并且标题将不会通过此算法移动.

GridSpec 的新便捷方法#

gridspec.GridSpecgridspec.GridSpecFromSubplotSpec 提供了新的便捷方法.现在,我们可以调用 Figure.add_gridspec 来替代前者,调用 SubplotSpec.subgridspec 来替代后者.

import matplotlib.pyplot as plt

fig = plt.figure()
gs0 = fig.add_gridspec(3, 1)
ax1 = fig.add_subplot(gs0[0])
ax2 = fig.add_subplot(gs0[1])
gssub = gs0[2].subgridspec(1, 3)
for i in range(3):
    fig.add_subplot(gssub[0, i])

Figure 有一个 add_artist 方法#

一个方法 add_artist 被添加到了 Figure 类中,它允许将艺术家直接添加到 figure 中.例如:

circ = plt.Circle((.7, .5), .05)
fig.add_artist(circ)

如果添加的艺术家之前没有设置变换,它将被设置为 figure 变换 ( fig.transFigure ).这个新方法对于在没有坐标轴的 figure 中添加艺术家,或者在 figure 坐标中轻松定位静态元素非常有用.

:math: 指令重命名为 :mathmpl:#

matplotlib.sphinxext.mathmpl 提供的 :math: rst 角色已重命名为 :mathmpl: ,以避免与 Sphinx 1.8 默认提供的 :math: 角色冲突.( :mathmpl: 使用 Matplotlib 将数学表达式渲染成嵌入在 html 中的图像,而 Sphinx 使用 MathJax.)

当使用 Sphinx<1.8 时,两个名称 ( :math::mathmpl: ) 仍然可用,以实现向后兼容性.