Dans Matplotlib, déplacer la légende en dehors de l'axe du tracé entraîne souvent sa coupure par la zone de figure. Bien que la réduction de l'axe ait été suggérée comme solution, cela diminue la visibilité des données, en particulier lors de la présentation de tracés complexes avec de nombreuses entrées de légende.
Une approche plus efficace, comme le souligne la réponse de Benjamin Root sur la liste de diffusion Matplotlib, implique modifier l'appel savefig pour incorporer la légende en tant qu'artiste supplémentaire :
fig.savefig('samplefigure', bbox_extra_artists=(lgd,), bbox_inches='tight')
Cette méthode, similaire à l'utilisation de tight_layout, permet à savefig de prendre en compte la légende lors du calcul de la taille de la boîte de la figure.
Le L'exemple de code amélioré suivant illustre la solution :
import matplotlib.pyplot as plt import numpy as np plt.gcf().clear() x = np.arange(-2*np.pi, 2*np.pi, 0.1) fig = plt.figure(1) ax = fig.add_subplot(111) ax.plot(x, np.sin(x), label='Sine') ax.plot(x, np.cos(x), label='Cosine') ax.plot(x, np.arctan(x), label='Inverse tan') handles, labels = ax.get_legend_handles_labels() lgd = ax.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5,-0.1)) text = ax.text(-0.2,1.05, "Aribitrary text", transform=ax.transAxes) ax.set_title("Trigonometry") ax.grid('on') fig.savefig('samplefigure', bbox_extra_artists=(lgd,text), bbox_inches='tight')
Cela ajuste désormais dynamiquement la taille de la zone de figure pour s'adapter à la légende, empêchant sa coupure tout en conservant la visibilité des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!