Estou plotando um conjunto de dados usando matplotlib
onde tenho um xlabel que é bastante "alto" (é uma fórmula renderizada em TeX que contém uma fração e, portanto, tem a altura equivalente a algumas linhas de texto).
De qualquer forma, a parte inferior da fórmula é sempre cortada quando desenho as figuras. Alterar o tamanho da figura não parece ajudar nisso, e eu não consegui descobrir como mudar o eixo x "para cima" para abrir espaço para o xlabel. Algo assim seria uma solução temporária razoável, mas o que seria bom seria ter uma maneira de fazer o matplotlib reconhecer automaticamente que o rótulo foi cortado e redimensionado de acordo.
Aqui está um exemplo do que quero dizer:
import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()
enquanto você pode ver todo o rótulo, o rótulo é cortado na parte inferior.
Caso este seja um problema específico da máquina, estou executando isso no OSX 10.6.8 com matplotlib 1.0.0
fonte
plt.savefig("test.png",bbox_inches='tight')
: stackoverflow.com/questions/21288062/...Respostas:
Usar:
para abrir espaço para o rótulo.
Editar:
Desde que eu dei a resposta,
matplotlib
adicionou atight_layout()
função. Então, eu sugiro usá-lo:deve abrir espaço para o xlabel.
fonte
gcf().subplots_adjust
pouco do queplt.subplots_adjust
? Existe alguma diferença?gcf
egca
? Você deixou de explicar!tight_layout()
tenha corrigido o ponto de corte dos xlabels, infelizmente o meu rótulo foi cortado (o que não havia sido cortado antes). No entanto, o primeiro remédio (subplots_adjust(bottom=0.25)
) funcionou bem. Obrigado.gcf()
egca()
são "obter figura atual" e "obter eixos atuais", respectivamente.Uma opção fácil é configurar o matplotlib para ajustar automaticamente o tamanho da plotagem. Funciona perfeitamente para mim e não sei por que não está ativado por padrão.
Método 1
Defina isso no seu arquivo matplotlibrc
Consulte aqui para obter mais informações sobre como personalizar o arquivo matplotlibrc: http://matplotlib.org/users/customizing.html
Método 2
Atualize os rcParams durante o tempo de execução como este
A vantagem de usar essa abordagem é que seu código produzirá os mesmos gráficos em máquinas configuradas de maneira diferente.
fonte
Caso você queira armazená-lo em um arquivo, resolva-o usando o
bbox_inches="tight"
argumento:fonte
Colocando
plot.tight_layout()
depois de todas as alterações no gráfico, pouco antesshow()
ousavefig()
resolverá o problema.fonte
plt.autoscale()
trabalhou para mim.fonte
Você também pode definir o preenchimento personalizado como padrão no
$HOME/.matplotlib/matplotlib_rc
seguinte: No exemplo abaixo, modifiquei o preenchimento inferior e esquerdo da caixa:fonte