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