"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como redimensionar dinamicamente a caixa da figura para caber na legenda de expansão em Python?

Como redimensionar dinamicamente a caixa da figura para caber na legenda de expansão em Python?

Publicado em 2024-11-02
Navegar:877

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

Redimensionando a caixa da figura para acomodar a legenda em expansão

Ao mover a legenda para fora do eixo no Matplotlib, há um desafio encontrado onde a legenda pode ser cortado pela caixa da figura. Esse problema ocorre quando a legenda se expande além do limite da área de plotagem. Tradicionalmente, ajustar o eixo para acomodar a legenda maior tem sido a solução recomendada, mas pode resultar na redução do tamanho dos dados, tornando-os mais difíceis de interpretar.

Redimensionamento Dinâmico da Caixa de Figura

Para resolver esse problema, a solução proposta é redimensionar dinamicamente a caixa da figura para acomodar a legenda em expansão sem alterar o tamanho dos dados. Esse comportamento é observado em R e LaTeX, mas não foi imediatamente aparente em Python. segue:

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

Neste código, lgd representa o objeto de legenda. Ao especificar bbox_extra_artists=(lgd,), permitimos que savefig ajuste dinamicamente a caixa da figura para caber na legenda.

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

Aqui está um exemplo com uma legenda complexa:

importar matplotlib.pyplot como plt importar numpy como np # Criar figura e subtrama fig = plt.figura(1) machado = fig.add_subplot(111) # Plote dados e crie legenda ax.plot(x, np.sin(x), label='Seno') ax.plot(x, np.cos(x), label='Cosseno') ax.plot(x, np.arctan(x), label='Tan inverso') lgd = ax.legend(loc='centro superior', bbox_to_anchor=(0,5,-0,1)) # Adicione texto arbitrário para teste text = ax.text(-0.2,1.05, "Texto arbitrário", transform=ax.transAxes) # Definir título e grade ax.set_title("Trigonometria") machado.grid('ligado') # Salvar figura com redimensionamento dinâmico fig.savefig('samplefigure', bbox_extra_artists=(lgd,text), bbox_inches='tight')

Este código gera um gráfico com uma legenda complexa que se estende além da área do eixo. O parâmetro bbox_extra_artists ajusta a caixa da figura para acomodar a legenda, resultando na exibição de toda a legenda.

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

Desde 2019, o código para redimensionamento dinâmico tornou-se simplificado. O seguinte comando agora é suficiente:

plt.savefig('x.png', bbox_inches='tight')

Declaração de lançamento Este artigo foi reimpresso em: 1729223538 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3