Um die Legende über alle Unterplots in einer Figur zu strecken, können Sie die Legendenplazierung halbieren. Die Verwendung der subplotpars
aus der Abbildung ermöglicht es, die verwendeten Abstände zu finden, so dass diese Abstände direkt in dem Argument bbox_to_anchor
verwendet werden können. Dazu muss die Legendentransformation über das Argument bbox_transform
auf die Figurtransformation festgelegt werden. Die einzigen Parameter, die Sie manuell angeben müssen, sind der Abstand zwischen den Achsen und der Legende (0,02 im unteren Beispiel) und die Höhe der Legende (0,05 im unteren Beispiel), beide in Einheiten der Figurenhöhe.
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)
Ein vollständiges Beispiel:
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()
Zur Frage, ob Sie benötigen eine oder zwei Legenden in einer wissenschaftlichen Arbeit, ist dies völlig abhängig von der Art des Papiers. Ich würde vermuten, dass die Verwendung einer einzigen Legende wie hier in Ordnung ist. Zeitschriften erfordern jedoch meistens, dass Sie jedes Unterplot mit einem kleinen Buchstaben markieren, wie a
und b
oder (a)
und .
Ist das eine Matplolib-Frage? –
ja ist es. Passt das nicht zu diesem Forum? – Tassou
Es ist geeignet. Es könnte mehr Antworten mit einem Matplotlib-Tag erhalten. Ich werde es hinzufügen. –