Jika saya menambahkan subtitle ke figur matplotlib saya, itu akan ditimpa oleh judul subplot. Adakah yang tahu cara mudah mengatasi itu? Saya mencoba tight_layout()
fungsinya, tetapi itu hanya memperburuk keadaan.
Contoh:
import numpy as np
import matplotlib.pyplot as plt
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure()
fig.suptitle('Long Suptitle', fontsize=24)
plt.subplot(121)
plt.plot(f)
plt.title('Very Long Title 1', fontsize=20)
plt.subplot(122)
plt.plot(g)
plt.title('Very Long Title 2', fontsize=20)
plt.tight_layout()
plt.show()
python
matplotlib
katrasnikj
sumber
sumber
tight_layout
dokumen:[left, bottom, right, top] in normalized (0, 1) figure coordinates
tight_layout(rect=[0, 0.03, 1, 0.9])
alih-alih0.95
seperti pada jawabannya.Anda dapat secara manual mengatur jarak menggunakan
plt.subplots_adjust(top=0.85)
:sumber
subplots_adjust
subplots_adjust
harus dipanggil setelah ada panggilan ketight_layout
, atau tidak akan ada efek panggilansubplots_adjust
.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. Alasannyatight_layout()
tidak membantu dalam kasus ini adalah karenatight_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 memanggiltight_layout
, menggunakanrect
kwarg. Untuk masalah Anda, kodenya menjadi:Menggunakan GridSpec
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 menggunakanannotate()
dan mengunci koordinat'figure fraction'
untuk meniru asuptitle
. Anda mungkin perlu melakukan beberapa penyesuaian yang lebih baik setelah Anda melihat hasilnya. Perhatikan bahwa solusi kedua ini tidak digunakantight_layout()
.Solusi yang lebih sederhana (meskipun mungkin perlu disesuaikan)
Hasil:
[Menggunakan
Python
2.7.3 (64-bit) danmatplotlib
1.2.0]sumber
GridSpec
) bagaimana saya bisa membuat subplot yang berbagi sumbu? Saya biasanya menggunakanplt.subplots(N,1, sharex=<>, sharey=<>)
saat membuat subplot, tetapi kode yang Anda posting menggunakanadd_subplot
sebaliknyafig.tight_layout(rect=[0, 0.03, 1, 0.95])
juga berhasil.Solusi alternatif dan mudah digunakan adalah menyesuaikan koordinat teks suptitle pada gambar menggunakan argumen y dalam panggilan suptitle (lihat dokumen ):
sumber
Tata letak yang ketat tidak bekerja dengan suptitle, tetapi
constrained_layout
tidak. Lihat pertanyaan ini Tingkatkan ukuran / jarak subplot dengan banyak subplot di matplotlibSaya menemukan menambahkan subplot sekaligus terlihat lebih baik, yaitu
Tapi itu juga bisa ditambahkan pada saat gambar dibuat:
Catatan: Untuk membuat subplot saya lebih dekat, saya juga menggunakan
dan constrained_layout tidak berfungsi dengan ini :(
sumber
Saya telah berjuang dengan matplotlib pemangkasan metode, jadi saya sekarang hanya membuat fungsi untuk melakukan hal ini melalui
bash
panggilan untukImageMagick
's perintah mogrify , yang bekerja dengan baik dan mendapat semua spasi ekstra dari tepi sosok ini. Ini mengharuskan Anda menggunakan UNIX / Linux, menggunakanbash
shell, dan telahImageMagick
menginstal.Hanya melakukan panggilan ke ini setelah
savefig()
panggilan Anda .sumber
Seperti yang disebutkan oleh orang lain, secara default tata letak yang ketat tidak memperhitungkan suptitle. Namun, saya telah menemukan bahwa mungkin untuk menggunakan
bbox_extra_artists
argumen untuk meneruskan suptitle sebagai kotak pembatas yang harus diperhitungkan:Ini memaksa perhitungan tata letak yang ketat untuk
suptitle
memperhitungkannya, dan tampaknya seperti yang Anda harapkan.sumber
Satu-satunya hal yang berhasil bagi saya adalah memodifikasi panggilan ke suptitle:
sumber
Saya memiliki masalah serupa yang muncul ketika menggunakan
tight_layout
untuk plot plot yang sangat besar (lebih dari 200 subplot) dan rendering di notebook jupyter. Saya membuat solusi cepat yang selalu menempatkan Andasuptitle
pada jarak tertentu di atas subplot teratas Anda:Untuk subplot berukuran bervariasi, Anda masih dapat menggunakan metode ini untuk mendapatkan bagian atas subplot teratas, kemudian secara manual menentukan jumlah tambahan untuk ditambahkan ke judul buku.
sumber