Saya menulis skrip cepat dan kotor untuk membuat plot dengan cepat. Saya menggunakan kode di bawah ini (dari dokumentasi Matplotlib ) sebagai titik awal:
from pylab import figure, axes, pie, title, show
# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]
explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})
show() # Actually, don't show, just save to foo.png
Saya tidak ingin menampilkan plot pada GUI, sebagai gantinya, saya ingin menyimpan plot ke file (katakanlah foo.png), sehingga, misalnya, dapat digunakan dalam skrip batch. Bagaimana aku melakukan itu?
python
matplotlib
plot
Homunculus Reticulli
sumber
sumber
savefig
metode juga. Jadi, Anda bisa meneleponfig = plt.figure()
kemudianfig.savefig(...)
.plt.close(fig)
yang sangat penting dalam loop besar. Kalau tidak, angka-angka tetap terbuka dan menunggu dalam memori dan semua angka terbuka akan ditampilkan setelah mengeksekusiplt.show()
Jawaban:
Sementara pertanyaan telah dijawab, saya ingin menambahkan beberapa kiat bermanfaat saat menggunakan matplotlib.pyplot.savefig . Format file dapat ditentukan oleh ekstensi:
Akan memberikan output rasterized atau vectorized masing-masing, keduanya dapat bermanfaat. Selain itu, Anda akan menemukan bahwa
pylab
meninggalkan ruang putih yang murah hati, sering tidak diinginkan, di sekitar gambar. Hapus dengan:sumber
plt.savefig
Anda dapat mengubah dpi, lihat tautan di jawabannya. Dimensi dapat dikontrol saat membuat gambar, lihatfigsize
di matplotlib.org/api/figure_api.html#matplotlib.figure.Figureplt.ioff()
yang harus menonaktifkan interaktivitas dalammatplotlib.pyplot
perintah.foo.png
adalah jalannya. Anda dapat, misalnya, meletakkannya di direktori seperti inisavefig("mydir/foo.png")
.Seperti yang dikatakan orang lain,
plt.savefig()
ataufig1.savefig()
memang cara untuk menyimpan gambar.Namun saya telah menemukan bahwa dalam kasus-kasus tertentu angka tersebut selalu ditampilkan . (mis. dengan Spyder memiliki
plt.ion()
: mode interaktif = Aktif.) Saya mengatasinya dengan memaksa penutupan jendela gambar di loop raksasa saya denganplt.close(figure_object)
(lihat dokumentasi ), jadi saya tidak memiliki satu juta angka terbuka selama loop:Anda harus dapat membuka kembali gambar nanti jika perlu dengan
fig.show()
(tidak menguji diri saya sendiri).sumber
plt.ioff() # turn of interactive plotting mode
, tetapi itu mungkin menonaktifkan perilaku yang ingin Anda gunakan seandainya kode Anda keluar dengan kesalahan.plt.close(fig)
dipecahkanSolusinya adalah:
sumber
Baru saja menemukan tautan ini pada dokumentasi MatPlotLib yang membahas masalah ini dengan tepat: http://matplotlib.org/faq/howto_faq.html#generate-images-without-having-a-window-appear
Mereka mengatakan bahwa cara termudah untuk mencegah angka muncul adalah dengan menggunakan backend non-interaktif (mis. Agg), melalui
matplotib.use(<backend>)
, misalnya:Secara pribadi saya masih lebih suka menggunakan
plt.close( fig )
, sejak itu Anda memiliki opsi untuk menyembunyikan angka-angka tertentu (selama satu lingkaran), tetapi masih menampilkan angka untuk pemrosesan data pasca-loop. Ini mungkin lebih lambat daripada memilih backend non-interaktif sekalipun - akan menarik jika seseorang mengujinya.UPDATE : untuk Spyder, Anda biasanya tidak dapat mengatur backend dengan cara ini (Karena Spyder biasanya memuat matplotlib lebih awal, mencegah Anda menggunakan
matplotlib.use()
).Alih-alih, gunakan
plt.switch_backend('Agg')
, atau Nonaktifkan " aktifkan dukungan " di Prefers Spyder dan jalankanmatplotlib.use('Agg')
perintah itu sendiri.Dari dua petunjuk ini: satu , dua
sumber
.plot()
akan menimbulkan kesalahan jikaos.environ['DISPLAY']
tidak disetel dengan benar.Jika Anda tidak menyukai konsep gambar "saat ini", lakukan:
sumber
src.png
keout.png
?img
), maka Anda dapat menyimpannya ke dalam file dengan.imsave()
metode.Jawaban lainnya benar. Namun, saya terkadang menemukan bahwa saya ingin membuka objek gambar nanti. Misalnya, saya mungkin ingin mengubah ukuran label, menambahkan kisi, atau melakukan pemrosesan lainnya. Di dunia yang sempurna, saya hanya akan menjalankan kembali kode yang menghasilkan plot, dan menyesuaikan pengaturan. Sayangnya, dunia ini tidak sempurna. Karena itu, selain menyimpan ke PDF atau PNG, saya menambahkan:
Seperti ini, nanti saya bisa memuat objek gambar dan memanipulasi pengaturan sesuka saya.
Saya juga menulis tumpukan dengan kode-sumber dan
locals()
kamus untuk setiap fungsi / metode dalam tumpukan, sehingga nantinya saya bisa tahu persis apa yang dihasilkan gambar tersebut.NB: Hati-hati, karena terkadang metode ini menghasilkan file besar.
sumber
sumber
Setelah menggunakan plot () dan fungsi lain untuk membuat konten yang Anda inginkan, Anda bisa menggunakan klausa seperti ini untuk memilih antara memplot ke layar atau ke file:
sumber
fig = plt.figure(figuresize=4, 5)
bisafig = plt.figure(figsize=(4, 5)) #figure sizes in inches
Saya menggunakan yang berikut ini:
Saya menemukan sangat penting untuk menggunakan plt.show setelah menyimpan gambar, jika tidak maka tidak akan berfungsi. angka yang diekspor dalam png
sumber
f= plt.savefig('data.png')
Anda dapat melakukan:
dan ingat untuk membiarkan savefig menyelesaikan sebelum menutup plot GUI. Dengan cara ini Anda dapat melihat gambar sebelumnya.
Atau, Anda dapat melihatnya dengan
plt.show()
Kemudian tutup GUI dan jalankan kembali skrip, tetapi kali ini gantiplt.show()
denganplt.savefig()
.Atau, Anda dapat menggunakan
sumber
Jika, seperti saya, Anda menggunakan Spyder IDE, Anda harus menonaktifkan mode interaktif dengan:
plt.ioff()
(perintah ini diluncurkan secara otomatis dengan startup ilmiah)
Jika Anda ingin mengaktifkannya lagi, gunakan:
plt.ion()
sumber
Solusinya :
Jika Anda ingin menampilkan gambar serta menyimpan penggunaan gambar:
setelah
import matplotlib
sumber
Menurut pertanyaan Matplotlib (pyplot) savefig menampilkan gambar kosong .
Satu hal yang harus diperhatikan: jika Anda menggunakan
plt.show
dan setelah ituplt.savefig
, atau Anda akan memberikan gambar kosong.Contoh terperinci:
sumber
Di Jupyter Notebook Anda harus menghapus
plt.show()
dan menambahkanplt.savefig()
, bersama dengan sisa kode plt dalam satu sel. Gambar masih akan muncul di buku catatan Anda.sumber
Mengingat hari ini (tidak tersedia ketika pertanyaan ini dibuat) banyak orang menggunakan Notebook Jupyter sebagai konsol python, ada cara yang sangat mudah untuk menyimpan plot
.png
, seperti panggil kelasmatplotlib
'pylab
dari Jupyter Notebook, plot gambar' inline sel jupyter, lalu seret gambar / gambar itu ke direktori lokal. Jangan lupa%matplotlib inline
di baris pertama!sumber
Selain yang di atas, saya menambahkan
__file__
nama sehingga gambar dan file Python mendapatkan nama yang sama. Saya juga menambahkan beberapa argumen untuk membuatnya terlihat lebih baik:sumber
Saat menggunakan
matplotlib.pyplot
, Anda harus terlebih dahulu menyimpan plot Anda dan kemudian menutupnya menggunakan 2 baris ini:sumber
Seperti yang disarankan sebelumnya, Anda dapat menggunakan:
Untuk menyimpan gambar IPhython apa pun yang Anda tampilkan. Atau pada catatan yang berbeda (melihat dari sudut yang berbeda), jika Anda pernah dapat bekerja dengan cv terbuka, atau jika Anda telah cv terbuka yang diimpor, Anda dapat menggunakan:
impor cv2
cv2.imwrite ("myfig.png", image)
Tetapi ini hanya untuk berjaga-jaga jika Anda perlu bekerja dengan Open CV. Kalau tidak, plt.savefig () harus cukup.
sumber
Anda dapat menyimpan gambar Anda dengan ekstensi apa pun (png, jpg, dll.) Dan dengan resolusi yang Anda inginkan. Inilah fungsi untuk menyimpan gambar Anda.
'fig_id' adalah nama tempat Anda ingin menyimpan gambar Anda. Semoga bermanfaat :)
sumber
Anda bisa melakukannya seperti ini:
sumber