"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-02
Parcourir:257

How to Dynamically Resize Figure Box to Fit Expanding Legend in Python?

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')
Déclaration de sortie Cet article est réimprimé à l'adresse : 1729223538. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

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