Satu hal yang dapat Anda ubah dalam kode Anda dengan sangat mudah adalah fontsize
Anda menggunakan judul-judulnya. Namun, saya akan berasumsi bahwa Anda tidak hanya ingin melakukan itu!
Beberapa alternatif untuk menggunakan fig.subplots_adjust(top=0.85)
:
Biasanya tight_layout()
melakukan pekerjaan yang cukup baik dalam memposisikan segala sesuatu di lokasi yang baik sehingga mereka tidak tumpang tindih. Alasannya tight_layout()
tidak membantu dalam kasus ini adalah karena tight_layout()
tidak memperhitungkan fig.suptitle (). Ada masalah terbuka tentang ini di GitHub: https://github.com/matplotlib/matplotlib/issues/829 [ditutup pada 2014 karena membutuhkan manajer geometri penuh - dialihkan ke https://github.com/matplotlib/matplotlib / issues / 1109 ].
Jika Anda membaca utas, ada solusi untuk masalah Anda yang melibatkan GridSpec
. Kuncinya adalah meninggalkan ruang di bagian atas gambar saat memanggil tight_layout
, menggunakan rect
kwarg. Untuk masalah Anda, kodenya menjadi:
Menggunakan 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()
Hasil:
Mungkin GridSpec
sedikit berlebihan bagi Anda, atau masalah Anda yang sebenarnya akan melibatkan lebih banyak subplot pada kanvas yang jauh lebih besar, atau komplikasi lainnya. Retas sederhana adalah dengan hanya menggunakan annotate()
dan mengunci koordinat 'figure fraction'
untuk meniru a suptitle
. Anda mungkin perlu melakukan beberapa penyesuaian yang lebih baik setelah Anda melihat hasilnya. Perhatikan bahwa solusi kedua ini tidak digunakan tight_layout()
.
Solusi yang lebih sederhana (meskipun mungkin perlu disesuaikan)
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()
Hasil:
[Menggunakan Python
2.7.3 (64-bit) dan matplotlib
1.2.0]