Redimensionner la zone de figure pour s'adapter à l'expansion de la légende
Lorsque vous déplacez la légende en dehors de l'axe dans Matplotlib, un défi est rencontré à l'endroit où la légende peut être coupé par la boîte à figurines. Ce problème se produit lorsque la légende s'étend au-delà des limites de la zone de tracé. Traditionnellement, l'ajustement de l'axe pour s'adapter à la légende plus grande est la solution recommandée, mais cela peut entraîner une réduction de la taille des données, ce qui les rend plus difficiles à interpréter.
Redimensionnement dynamique de la zone de figure
Pour résoudre ce problème, la solution proposée consiste à redimensionner dynamiquement la zone de figure pour s'adapter à la légende en expansion sans modifier la taille des données. Ce comportement est observé dans R et LaTeX mais n'était pas immédiatement apparent dans Python.
Code pour redimensionner dynamiquement la zone de figure
Le code suggéré pour accomplir ce redimensionnement dynamique est le suivant suit :
fig.savefig('samplefigure', bbox_extra_artists=(lgd,), bbox_inches='tight')
Dans ce code, lgd représente l'objet légende. En spécifiant bbox_extra_artists=(lgd,), nous permettons à savefig d'ajuster dynamiquement la zone de la figure pour l'adapter à la légende.
Exemple avec une légende complexe
Voici un exemple avec une légende complexe :
import matplotlib.pyplot as plt
import numpy as np
# Create figure and subplot
fig = plt.figure(1)
ax = fig.add_subplot(111)
# Plot data and create legend
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')
lgd = ax.legend(loc='upper center', bbox_to_anchor=(0.5,-0.1))
# Add arbitrary text for testing
text = ax.text(-0.2,1.05, "Aribitrary text", transform=ax.transAxes)
# Set title and grid
ax.set_title("Trigonometry")
ax.grid('on')
# Save figure with dynamic resizing
fig.savefig('samplefigure', bbox_extra_artists=(lgd,text), bbox_inches='tight')
Ce code génère un tracé avec une légende complexe qui s'étend au-delà de la zone de l'axe. Le paramètre bbox_extra_artists ajuste la zone de la figure pour s'adapter à la légende, ce qui entraîne l'affichage de la légende entière.
Remarque :
Depuis 2019, le code de redimensionnement dynamique est devenu simplifié. La commande suivante est désormais suffisante :
plt.savefig('x.png', bbox_inches='tight')
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3