Kode di bawah ini menghasilkan celah di antara subplot. Bagaimana cara menghapus celah antara subplot dan membuat gambar menjadi kisi yang rapat?
import matplotlib.pyplot as plt
for i in range(16):
i = i + 1
ax1 = plt.subplot(4, 4, i)
plt.axis('on')
ax1.set_xticklabels([])
ax1.set_yticklabels([])
ax1.set_aspect('equal')
plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
python
matplotlib
pengguna3006135
sumber
sumber
None
tidak melakukan apa yang Anda pikirkan, itu berarti 'gunakan default'.plt.subplots_adjust(wspace=0, hspace=0)
akan menyelesaikan masalah Anda, jika bukan karena Anda menggunakan'equal'
aspek. Lihat jawaban saya untuk detailnya.Jawaban:
Anda dapat menggunakan gridspec untuk mengontrol jarak antar sumbu. Ada lebih banyak informasi di sini.
sumber
GridSpec
, jika Anda mengambil gambar saat penciptaan, Anda juga dapat mengatur jarak dengan:fig.subplots_adjust(hspace=, wspace=)
for
loop?subplots
. Jawaban ini menyelesaikan pekerjaan tanpa mengorbankansubplots
.Masalahnya adalah penggunaan
aspect='equal'
, yang mencegah subplot meregang ke rasio aspek arbitrer dan mengisi semua ruang kosong.Biasanya, ini akan berhasil:
Hasilnya begini:
Namun, dengan
aspect='equal'
, seperti pada kode berikut:Inilah yang kami dapatkan:
Perbedaan dalam kasus kedua ini adalah Anda memaksa sumbu x dan y memiliki jumlah unit / piksel yang sama. Karena sumbu berubah dari 0 ke 1 secara default (yaitu, sebelum Anda memplot apapun), menggunakan
aspect='equal'
gaya setiap sumbu menjadi persegi. Karena gambar tersebut bukan persegi, pyplot menambahkan spasi ekstra antara sumbu secara horizontal.Untuk mengatasi masalah ini, Anda dapat mengatur gambar Anda agar memiliki rasio aspek yang benar. Kami akan menggunakan antarmuka pyplot berorientasi objek di sini, yang saya anggap lebih unggul secara umum:
Inilah hasilnya:
sumber
plt.subplots_adjust(wspace=0, hspace=0)
Tanpa menggunakan gridspec sepenuhnya, berikut ini mungkin juga digunakan untuk menghilangkan celah dengan mengatur wspace dan hspace ke nol:
Yang menghasilkan:
sumber
Apakah Anda mencoba
plt.tight_layout()
?dengan
plt.tight_layout()
tanpa itu:Atau: sesuatu seperti ini (gunakan
add_axes
)Jika Anda tidak perlu berbagi sumbu, cukup
axLS=map(fig.add_axes, rectLS)
sumber
Dengan versi matplotlib terbaru, Anda mungkin ingin mencoba Constrained Layout . Namun ini tidak berfungsi
plt.subplot()
, jadi Anda perlu menggunakanplt.subplots()
:sumber