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
Libérer: 2024-10-18 12:52:03
original
307 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal