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.TextPath
和 matplotlib.patches.FancyArrowPatch
。箭头的尾部和头部的位置、长度和宽度都可以调整,方向箭头和标签可以有边框。可以调整填充和分隔参数。
为颜色条添加 minorticks_on()/off()
方法#
已添加新方法 ColorbarBase.minorticks_on
以正确显示颜色条上的次刻度。当 extend 关键字参数(在创建颜色条时使用)设置为“both”、“max”或“min”时,此方法不允许次刻度延伸到 vmin 和 vmax 之外的区域。还添加了一个补充方法 ColorbarBase.minorticks_off
来移除颜色条上的次刻度。
颜色条刻度现在可以自动设置#
以前放置在颜色条上的刻度数量对于大型颜色条来说是合适的,但如果颜色条变小(即通过 shrink 关键字参数),则看起来效果不佳。现在已更改,使刻度数量响应颜色条的大小。
不要自动重命名重复的文件名#
以前,当使用 GUI 的保存对话框将图形保存到文件时,如果默认文件名(基于图形窗口标题)已存在于磁盘上,Matplotlib 会添加一个后缀(例如 Figure_1-1.png
),从而阻止对话框提示覆盖文件。此行为已被移除。现在,如果文件名在磁盘上存在,系统会提示用户是否覆盖它。这消除了猜测,并允许有意覆盖,尤其是在使用 figure.canvas.set_window_title()
手动设置图形名称时。
图例现在具有 title_fontsize 关键字参数(和 rcParam)#
Figure.legend
和 Axes.legend
的标题现在可以通过 title_fontsize 关键字参数设置字体大小。还有一个新的 rcParams["legend.title_fontsize"]
(默认值:None
)。两者都默认为 None
,这意味着图例标题将与坐标轴的默认字体大小相同(不是图例字体大小,图例字体大小由 fontsize 关键字参数或 rcParams["legend.fontsize"]
设置(默认值:'medium'
))。
rcParams 中对 axes.prop_cycle 属性 markevery 的支持#
Matplotlib rcParams
设置对象现在支持使用 markevery Line2D 对象属性的循环器来配置属性 rcParams["axes.prop_cycle"]
(默认值: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()
坐标轴标题将不再与 x 轴重叠#
以前,如果 x 轴重叠(通常是当 x 轴放在坐标轴顶部时),则必须手动移动坐标轴标题。现在,如果 x 轴及其装饰器(包括 xlabel)位于顶部,则标题将自动移到它们上方。
如果需要,标题仍可手动放置。有一个小技巧;算法会检查标题的 y 位置是否为 1.0(默认值),如果是,则移动。如果用户将标题放置在默认位置(即 ax.title.set_position(0.5, 1.0)
),标题仍将移到 x 轴上方。如果用户想避免这种情况,他们可以指定一个接近的数字(即 ax.title.set_position(0.5, 1.01)
),并且标题将不会通过此算法移动。
GridSpec 的新便捷方法#
gridspec.GridSpec
和 gridspec.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
方法#
Figure
类中添加了 add_artist
方法,允许将 artist 直接添加到图形中。例如:
circ = plt.Circle((.7, .5), .05)
fig.add_artist(circ)
如果添加的 artist 之前没有设置变换,它将被设置为图形变换(fig.transFigure
)。此新方法对于将 artist 添加到没有坐标轴的图形中,或轻松在图形坐标中定位静态元素可能很有用。
:math:
指令重命名为 :mathmpl:
#
由 matplotlib.sphinxext.mathmpl
提供的 :math:
rst 角色已重命名为 :mathmpl:
,以避免与 Sphinx 1.8 默认提供的 :math:
角色冲突。(:mathmpl:
使用 Matplotlib 将数学表达式渲染为嵌入在 html 中的图像,而 Sphinx 使用 MathJax。)
当使用 Sphinx<1.8 时,为了向后兼容,两个名称(:math:
和 :mathmpl:
)仍然可用。