Maison >développement back-end >Tutoriel Python >Comment redimensionner dynamiquement la zone de figure pour l'adapter à la légende extensible en Python ?

Comment redimensionner dynamiquement la zone de figure pour l'adapter à la légende extensible en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-18 12:52:03225parcourir

How to Dynamically Resize Figure Box to Fit Expanding Legend in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn