Uma coisa que você pode alterar no seu código com muita facilidade é a que fontsize
você está usando para os títulos. No entanto, vou assumir que você não quer apenas fazer isso!
Algumas alternativas ao uso fig.subplots_adjust(top=0.85)
:
Geralmente, tight_layout()
faz um bom trabalho no posicionamento de tudo em bons locais para que não se sobreponham. O motivo tight_layout()
não ajuda nesse caso é porque tight_layout()
não leva em consideração fig.suptitle (). Há um problema em aberto sobre isso no GitHub: https://github.com/matplotlib/matplotlib/issues/829 [encerrado em 2014 devido à necessidade de um gerente de geometria completo - alterado para https://github.com/matplotlib/matplotlib / edições / 1109 ].
Se você ler o tópico, há uma solução para o seu problema GridSpec
. A chave é deixar algum espaço na parte superior da figura ao chamar tight_layout
, usando o rect
kwarg. Para o seu problema, o código se torna:
Usando GridSpec
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure(1)
gs1 = gridspec.GridSpec(1, 2)
ax_list = [fig.add_subplot(ss) for ss in gs1]
ax_list[0].plot(f)
ax_list[0].set_title('Very Long Title 1', fontsize=20)
ax_list[1].plot(g)
ax_list[1].set_title('Very Long Title 2', fontsize=20)
fig.suptitle('Long Suptitle', fontsize=24)
gs1.tight_layout(fig, rect=[0, 0.03, 1, 0.95])
plt.show()
O resultado:
Talvez GridSpec
seja um pouco exagerado para você, ou o seu problema real envolverá muito mais subtramas em uma tela muito maior ou outras complicações. Um hack simples é usar annotate()
e bloquear as coordenadas 'figure fraction'
para imitar a suptitle
. Você pode precisar fazer alguns ajustes mais precisos depois de analisar a saída. Observe que esta segunda solução não usatight_layout()
.
Solução mais simples (embora possa precisar ser ajustada)
fig = plt.figure(2)
ax1 = plt.subplot(121)
ax1.plot(f)
ax1.set_title('Very Long Title 1', fontsize=20)
ax2 = plt.subplot(122)
ax2.plot(g)
ax2.set_title('Very Long Title 2', fontsize=20)
# fig.suptitle('Long Suptitle', fontsize=24)
# Instead, do a hack by annotating the first axes with the desired
# string and set the positioning to 'figure fraction'.
fig.get_axes()[0].annotate('Long Suptitle', (0.5, 0.95),
xycoords='figure fraction', ha='center',
fontsize=24
)
plt.show()
O resultado:
[Usando Python
2.7.3 (64 bits) e matplotlib
1.2.0]