Je connais le mot-clé bbox_to_anchor et ce fil, qui suggère très utilement comment placer manuellement la légende:
Comment sortir la légende de l'intrigue
Cependant, j'aimerais utiliser les coordonnées de mes axes x et y dans le graphique pour spécifier la position de la légende (à l'intérieur du tracé), car je pourrais avoir besoin de déplacer la figure dans une grande figure avec un environnement d'axe différent, et je ne veux pas jouer manuellement avec ces coordonnées à chaque fois que je fais cela. Est-ce possible?
Edit: Un petit exemple est ici:
import numpy as n
f, axarr = plt.subplots(2,sharex=True)
axarr[1].set_ylim([0.611,0.675])
axarr[0].set_ylim([0.792,0.856])
axarr[0].plot([0, 0.04, 0.08],n.array([ 0.83333333, 0.82250521,0.81109048]), label='test1')
axarr[0].errorbar([0, 0.04, 0.08],n.array([ 0.8, 0.83, 0.82]),n.array([0.1,0.1,0.01]), label='test2')
axarr[1].plot([0, 0.04, 0.08],n.array([ 0.66666667, 0.64888304, 0.63042428]))
axarr[1].errorbar([0, 0.04, 0.08],n.array([ 0.67, 0.64, 0.62]),n.array([ 0.01, 0.05, 0.1]))
axarr[0].legend(bbox_to_anchor=(0.04, 0.82, 1., .102),labelspacing=0.1, handlelength=0.1, handletextpad=0.1,frameon=False, ncol=4, columnspacing=0.7)
Je pense que ce qui me dérange, c'est que la légende ne commence pas réellement à 0,82, et même pour mon intrigue plus grande (avec 5 sous-intrigues de ce type), je dois utiliser les coordonnées de la légende bbox_to_anchor = (0.04, 1.15, 1., .102). afin de faire apparaître la légende sur les coordonnées (0.02, 0.83). Mais peut-être que je me trompe?
Vous pouvez changer l'emplacement de la légende en utilisant l'argument loc. https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.legend
import matplotlib.pyplot as plt
plt.subplot(211)
plt.plot([1,2,3], label="test1")
plt.plot([3,2,1], label="test2")
# Place a legend above this subplot, expanding itself to
# fully use the given bounding box.
plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
ncol=2, mode="expand", borderaxespad=0.)
plt.subplot(223)
plt.plot([1,2,3], label="test1")
plt.plot([3,2,1], label="test2")
# Place a legend to the right of this smaller subplot.
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)
plt.show()
En plus du message de @ ImportanceOfBeingErnest, j'utilise la ligne suivante pour ajouter une légende en position absolue dans un tracé.
plt.legend(bbox_to_anchor=(1.0,1.0),\
bbox_transform=plt.gcf().transFigure)
Pour des raisons inconnues, bbox_transform=fig.transFigure
ne fonctionne pas avec moi.