Maison >développement back-end >Tutoriel Python >Comment redimensionner dynamiquement la zone de figure pour l'adapter à la légende extensible en Python ?
Redimensionner la zone de figure pour s'adapter à la légende en expansion
Lorsque vous déplacez la légende en dehors de l'axe dans Matplotlib, un défi est rencontré là 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 boîte de figure
Le code suggéré pour accomplir ce redimensionnement dynamique est le suivant suit :
<code class="python">fig.savefig('samplefigure', bbox_extra_artists=(lgd,), bbox_inches='tight')</code>
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 Légende complexe
Voici un exemple avec une légende complexe :
<code class="python">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')</code>
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 :
<code class="python">plt.savefig('x.png', bbox_inches='tight')</code>
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!