要在图中的所有子图中拉伸图例,您可以半自动放置图例。使用图中的subplotpars 可以找到使用的间距,以便可以直接在bbox_to_anchor 参数中使用这些间距。这需要通过bbox_transform 参数将图例转换设置为图形转换。您需要手动指定的唯一参数是轴与图例之间的间距(下例中为 0.02)和图例高度(下例中为 0.05),均以图形高度为单位。
s = fig.subplotpars
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ]
leg = axes[0].legend(..., bbox_to_anchor=bb, mode="expand", borderaxespad=0,
bbox_transform=fig.transFigure)
一个完整的例子:
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.random.rand(10,8), axis=0)
fig, axes = plt.subplots(ncols=2)
for i in range(a.shape[1]):
axes[i//4].plot(a[:,i], marker="s", label="Label {}".format(i))
s = fig.subplotpars
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ]
leg = axes[0].legend(loc=8, bbox_to_anchor=bb, ncol= 4, mode="expand", borderaxespad=0,
bbox_transform=fig.transFigure, fancybox=False, edgecolor="k")
leg.get_frame().set_linewidth(72./fig.dpi)
plt.show()
至于在一篇科学论文中是否需要一个或两个图例,这完全取决于论文的风格。我猜想使用像这里这样的单个图例就可以了。然而,期刊大多要求您用小写字母标记每个子图,例如 a 和 b 或 (a) 和 (b)。