コードで非常に簡単に変更できることの1つfontsize
は、タイトルに使用しているものです。しかし、私はあなたがそれをしたくないだけだと思います!
を使用するいくつかの代替fig.subplots_adjust(top=0.85)
:
通常tight_layout()
、すべてが適切な場所に配置され、重複しないように配置することで、かなりうまくいきます。その理由はtight_layout()
ので、この場合のヘルプがあるしないtight_layout()
口座に)(fig.suptitleかかりません。GitHubにはこれに関する未解決の問題があります:https : //github.com/matplotlib/matplotlib/issues/829 [完全なジオメトリマネージャーが必要なため2014年にクローズ-https: //github.com/matplotlib/matplotlib / issues / 1109 ]。
スレッドを読んだ場合、に関する問題の解決策がありますGridSpec
。重要なのはtight_layout
、rect
kwarg を使用してを呼び出すときに、図の上部にスペースを空けることです。あなたの問題では、コードは次のようになります:
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()
結果:
多分GridSpec
あなたにとって少しやり過ぎかもしれません、またはあなたの実際の問題ははるかに大きなキャンバス上の他のより多くのサブプロット、または他の合併症を伴うでしょう。単純なハックはannotate()
、座標をに使用してロックし、'figure fraction'
を模倣することsuptitle
です。ただし、出力を確認したら、さらに細かい調整が必要になる場合があります。この2番目のソリューションはを使用しないことに注意してくださいtight_layout()
。
よりシンプルなソリューション(微調整が必要な場合があります)
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()
結果:
[ Python
2.7.3(64ビット)およびmatplotlib
1.2.0を使用]