"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo cambiar dinámicamente el tamaño del cuadro de figura para que se ajuste a la leyenda desplegable en Python?

¿Cómo cambiar dinámicamente el tamaño del cuadro de figura para que se ajuste a la leyenda desplegable en Python?

Publicado el 2024-11-02
Navegar:131

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

Cambiar el tamaño del cuadro de figura para acomodar la leyenda expandida

Al mover la leyenda fuera del eje en Matplotlib, se encuentra un desafío donde la leyenda puede ser cortado por el cuadro de la figura. Este problema ocurre cuando la leyenda se expande más allá del límite del área de trazado. Tradicionalmente, la solución recomendada ha sido ajustar el eje para acomodar la leyenda más grande, pero puede resultar en una reducción del tamaño de los datos, lo que los hace más difíciles de interpretar.

Cambio de tamaño dinámico del cuadro de figura

Para abordar este problema, la solución propuesta es cambiar dinámicamente el tamaño del cuadro de figura para acomodar la leyenda en expansión sin alterar el tamaño de los datos. Este comportamiento se observa en R y LaTeX, pero no fue evidente de inmediato en Python.

Código para cambiar el tamaño dinámicamente del cuadro de figuras

El código sugerido para lograr este cambio de tamaño dinámico es el siguiente sigue:

fig.savefig('samplefigure', bbox_extra_artists=(lgd,), bbox_inches='tight')

En este código, lgd representa el objeto de leyenda. Al especificar bbox_extra_artists=(lgd,), permitimos que savefig ajuste dinámicamente el cuadro de la figura para que se ajuste a la leyenda.

Ejemplo con leyenda compleja

Aquí hay un ejemplo con una leyenda compleja:

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')

Este código genera un gráfico con una leyenda compleja que se extiende más allá del área del eje. El parámetro bbox_extra_artists ajusta el cuadro de la figura para acomodar la leyenda, lo que hace que se muestre la leyenda completa.

Nota:

Desde 2019, el código para el cambio de tamaño dinámico se ha convertido en simplificado. El siguiente comando ahora es suficiente:

plt.savefig('x.png', bbox_inches='tight')
Declaración de liberación Este artículo se reimprime en: 1729223538 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3