Muito parecido com essa pergunta, mas com a diferença de que minha figura pode ser tão grande quanto precisa.
Preciso gerar um monte de gráficos empilhados verticalmente no matplotlib. O resultado será salvo usando figsave e visualizado em uma página da web. Portanto, não me importo com a altura da imagem final, contanto que as subparcelas sejam espaçadas para que não se sobreponham.
Por maior que eu permita que a figura seja, as subparcelas sempre parecem se sobrepor.
Meu código atualmente parece
import matplotlib.pyplot as plt
import my_other_module
titles, x_lists, y_lists = my_other_module.get_data()
fig = plt.figure(figsize=(10,60))
for i, y_list in enumerate(y_lists):
plt.subplot(len(titles), 1, i)
plt.xlabel("Some X label")
plt.ylabel("Some Y label")
plt.title(titles[i])
plt.plot(x_lists[i],y_list)
fig.savefig('out.png', dpi=100)
python
matplotlib
Mcstrother
fonte
fonte
tight_layout()
é um sucesso e um erro. Eu tenho tentado entender o que é diferente quando ele não tem efeito (grandes margens inter-enredo permanecem) - que muitas vezes ésuptitle
) ao título da subtrama. Caso alguém encontre um problema semelhante, eis o que ajudou no meu caso stackoverflow.com/a/45161551/11740420 . Ou seja, orect
parâmetro detight_layout()
Você pode usar
plt.subplots_adjust
para alterar o espaçamento entre as subparcelas (origem)assinatura de chamada:
Os significados dos parâmetros (e padrões sugeridos) são:
Os padrões reais são controlados pelo arquivo rc
fonte
Eu descobri que subplots_adjust (hspace = 0.001) é o que acabou funcionando para mim. Quando eu uso space = None, ainda há espaço em branco entre cada plot. Configurá-lo para algo muito próximo de zero, no entanto, parece forçá-los a alinhar. O que eu enviei aqui não é o código mais elegante, mas você pode ver como o hspace funciona.
fonte
O método plt.subplots_adjust :
ou
O tamanho da imagem é importante.
"Tentei mexer com o hspace, mas aumentá-lo apenas parece diminuir todos os gráficos sem resolver o problema de sobreposição".
Assim, para criar mais espaço em branco e manter o tamanho da subparcela, a imagem total precisa ser maior.
fonte
plt.figure(figsize=(10, 7))
, o tamanho do quadro seria2000 x 1400
pixVocê pode tentar o subplot_tool ()
fonte
Semelhante ao
tight_layout
matplotlib agora (a partir da versão 2.2) fornececonstrained_layout
. Por outro ladotight_layout
, que pode ser chamado a qualquer momento no código para um único layout otimizado,constrained_layout
é uma propriedade que pode estar ativa e otimizará o layout antes de cada etapa do desenho.Portanto, ele precisa ser ativado antes ou durante a criação de subparcelas, como
figure(constrained_layout=True)
ousubplots(constrained_layout=True)
.Exemplo:
constrained_layout também pode ser definido através de
rcParams
Veja a entrada de novidades e o Guia de layout restrito
fonte
tight_layout
não é confiáveltight_layout()
funcionou melhorcontrained_layout
é mais lento, porque, como visto nesta resposta, otimiza o layout antes de cada etapa do desenho .