Saya berjuang untuk berurusan dengan margin plot saya di matplotlib. Saya telah menggunakan kode di bawah ini untuk menghasilkan bagan saya:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Namun, saya mendapatkan angka output dengan banyak ruang putih di kedua sisi plot. Saya telah mencari di google dan membaca dokumentasi matplotlib, tetapi sepertinya saya tidak bisa menemukan cara untuk mengurangi ini.
python
matplotlib
Robintw
sumber
sumber
extent
dariimshow
angka, atau jumlah spasi perbatasan di png dihasilkan, sekitar angka, yang dihasilkan olehsavefig
?savefig
- jadi itulah yang ingin saya urutkan.Jawaban:
Salah satu cara untuk melakukan ini secara otomatis adalah
bbox_inches='tight'
kwarg toplt.savefig
.Misalnya
Cara lain adalah menggunakan
fig.tight_layout()
sumber
fig.savefig()
juga. (plt.savefig()
tidak akan bekerja dalam kasus itu.)fig.tight_layout()
. Fungsi itu tidak ada ketika jawaban ini awalnya ditulis, kalau tidak saya akan menyebutkannya lebih jelas.fig = plt.gcf()
Anda dapat menyesuaikan spasi di sekitar angka matplotlib menggunakan fungsi subplots_adjust ():
Ini akan berfungsi baik untuk gambar di layar dan disimpan ke file, dan itu adalah fungsi yang tepat untuk memanggil bahkan jika Anda tidak memiliki banyak plot pada satu gambar.
Angka-angka adalah pecahan dari dimensi gambar, dan perlu disesuaikan untuk memungkinkan label gambar.
sumber
GridSpec
objek dengan memanggilupdate
metode (lihat stackoverflow.com/a/20058199/1030876 ).Yang kamu butuhkan adalah
sebelum hasil Anda.
Selain memotong margin, ini juga secara ketat mengelompokkan ruang di antara setiap subplot:
sumber
bbox_inches='tight'
, yang hanya memotong ruang putih di sekitar tepi tetapi meninggalkan plot itu sendiri. Saya membuat gambar denganplt.figure(figsize=(10,3))
.Cukup gunakan
ax = fig.add_axes([left, bottom, width, height])
jika Anda ingin kontrol tata letak gambar yang tepat. misalnya.sumber
Jika ada yang bertanya-tanya bagaimana cara menghilangkan sisa margin putih setelah menerapkan
plt.tight_layout()
ataufig.tight_layout()
: Dengan parameterpad
(yang secara1.08
default), Anda dapat membuatnya lebih ketat: "Padding antara tepi gambar dan tepi subplot, sebagai sebagian kecil dari ukuran font. " Jadi misalnyaakan menguranginya menjadi margin yang sangat kecil. Puting
0
tidak berfungsi untuk saya, karena itu membuat kotak subplot sedikit terpotong juga.sumber
sumber
savefig
fungsi itu elegan, namun nilai negatif untukpad_inches
tidak selalu diperlukan dalam setiap kasus.Masalah dengan matplotlibs subplots_adjust adalah bahwa nilai yang Anda masukkan relatif terhadap x dan y figsize dari gambar. Contoh ini untuk menentukan angka yang benar untuk pencetakan pdf:
Untuk itu, saya menghitung ulang jarak relatif ke nilai absolut seperti ini:
untuk figur 'figur.xsize' inci dalam dimensi x dan 'figur.isize' inci dalam dimensi-y. Jadi seluruh gambar memiliki margin kiri 5 mm, margin bawah 4 mm, kanan 1 mm dan atas 3 mm di dalam label ditempatkan. Konversi (x / 25,4) dilakukan karena saya perlu mengkonversi mm ke inci.
Perhatikan bahwa ukuran bagan murni x akan menjadi "figure.xsize - margin kiri - margin kanan" dan ukuran bagan murni y akan menjadi "figur.isize - margin bawah - margin atas" dalam inci
Sniplets lain (tidak yakin tentang ini, saya hanya ingin memberikan parameter lain)
dan
sumber
xsize
danysize
dari. Saya menggunakan properti itu dan saya dapatkanAttributeError: 'Figure' object has no attribute 'xsize'
terinspirasi oleh jawaban Sammys di atas:
Di mana figsize adalah tuple yang Anda gunakan
fig = pyplot.figure(figsize=...)
sumber
Bagi saya, jawaban di atas tidak berfungsi
matplotlib.__version__ = 1.4.3
pada Win7. Jadi, jika kita hanya tertarik pada gambar itu sendiri (yaitu, jika kita tidak memerlukan anotasi, sumbu, kutu, judul, ylabel dll), maka lebih baik hanya menyimpan array numpy sebagai gambar alih-alihsavefig
.Juga, menggunakan fungsi-fungsi menggambar OpenCV (cv2.line, cv2.polylines), kita dapat melakukan beberapa gambar langsung pada array numpy. http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html
sumber
Dengan versi matplotlib terbaru, Anda mungkin ingin mencoba Layout Terkendali .
sumber