Ini akan menjadi fitur yang hebat, tetapi AFAIK tidak diimplementasikan di Matplotlib dan kemungkinan akan sulit untuk diimplementasikan sendiri karena cara gambar disimpan.
Saya akan menyarankan (a) memisahkan pemrosesan data dari pembuatan gambar (yang menyimpan data dengan nama unik) dan menulis skrip penghasil gambar (memuat file tertentu dari data yang disimpan) dan mengedit sesuai keinginan Anda atau (b ) simpan sebagai format PDF / SVG / PostScript dan edit di beberapa editor gambar mewah seperti Adobe Illustrator (atau Inkscape ).
EDIT posting Musim Gugur 2012 : Seperti yang ditunjukkan orang lain di bawah (meskipun disebutkan di sini karena ini adalah jawaban yang diterima), Matplotlib sejak versi 1.2 memungkinkan Anda untuk membuat acar. Seperti yang dinyatakan dalam catatan rilis , ini adalah fitur eksperimental dan tidak mendukung penyimpanan gambar dalam satu versi matplotlib dan dibuka di versi lain. Biasanya juga tidak aman untuk memulihkan acar dari sumber yang tidak tepercaya.
Untuk berbagi / kemudian mengedit plot (yang membutuhkan pemrosesan data yang signifikan terlebih dahulu dan mungkin perlu di-tweak beberapa bulan kemudian, katakanlah saat peer review untuk publikasi ilmiah), saya tetap merekomendasikan alur kerja (1) memiliki skrip pemrosesan data yang sebelum membuat plot menyimpan data yang diproses (yang masuk ke dalam plot Anda) ke dalam file, dan (2) memiliki skrip pembuatan plot terpisah (yang Anda sesuaikan seperlunya) untuk membuat ulang plot. Dengan cara ini untuk setiap plot Anda dapat dengan cepat menjalankan skrip dan membuatnya kembali (dan dengan cepat menyalin pengaturan plot Anda dengan data baru). Meskipun demikian, membuat gambar menjadi lebih nyaman untuk analisis data jangka pendek / interaktif / eksplorasi.
pickle
sekarang bekerja pada gambar MPL, jadi ini dapat dilakukan dan tampaknya berfungsi dengan baik - hampir seperti file gambar ".fig" Matlab. Lihat jawaban saya di bawah (untuk sekarang?) Untuk contoh bagaimana melakukannya.Saya baru tahu bagaimana melakukan ini. "Dukungan acar eksperimental" yang disebutkan oleh @pelson bekerja dengan cukup baik.
Coba ini:
Setelah tweaker interaktif Anda, simpan objek gambar sebagai file biner:
Nanti, buka gambar dan tweak harus disimpan dan interaktivitas GUI harus ada:
Anda bahkan dapat mengekstrak data dari plot:
(Ini berfungsi untuk garis, pcolor & imshow - pcolormesh bekerja dengan beberapa trik untuk merekonstruksi data yang diratakan .)
Saya mendapat tip bagus dari Menyimpan Angka Matplotlib Menggunakan Acar .
sumber
pickle
dokumentasinya menyatakan bahwa kita perlu mengatur lingkungan yang sama seperti ketika objek itu diawetkan (disimpan), tetapi saya telah menemukan Anda tidak perluimport matplotlib.pyplot as plt
ketika melepasnya (memuat) - ini menyimpan pernyataan impor dalam file acar .with open('FigureObject.fig.pickle', 'rb') as file: figx = pickle.load(file)
figx.show()
, Anda harus memanggilplt.show()
, yang memblokir.Pada Matplotlib 1.2, kami sekarang memiliki dukungan acar eksperimental . Cobalah dan lihat apakah itu berfungsi dengan baik untuk kasus Anda. Jika Anda mengalami masalah, beri tahu kami di milis Matplotlib atau dengan membuka masalah di github.com/matplotlib/matplotlib .
sumber
PicklingError: Can't pickle <type '_macosx.GraphicsContext'>: it's not found as _macosx.GraphicsContext
.PicklingError
hanya terjadi jika Anda meneleponplt.show()
sebelum melakukan pengawetan. Jadi tempatkan sajaplt.show()
setelahnyapickle.dump()
.fig.show()
tampaknya tidak masalah - mungkin bug itu telah diperbaiki. Saya bisa membuat acar sebelum / sesudahshow()
tanpa masalah.Mengapa tidak mengirim skrip Python saja? File .fig MATLAB mengharuskan penerima untuk memiliki MATLAB untuk menampilkannya, jadi itu hampir setara dengan mengirim skrip Python yang membutuhkan Matplotlib untuk ditampilkan.
Sebagai alternatif (penafian: Saya belum mencoba ini), Anda dapat mencoba mengawetkan gambar:
sumber
MyPlot.fig.pickle
file - dengan mempertahankan kemampuan selanjutnya untuk menyesuaikan presentasi plot sesuai kebutuhan. Ini juga yang hebat tentang.fig
file Matlab . Berguna terutama saat Anda perlu mengubah ukuran / rasio aspek gambar (untuk dimasukkan ke dalam presentasi / makalah).Pertanyaan bagus. Ini teks dokumen dari
pylab.save
:sumber
pylab.save
. Bahkan, dari teks dokumen, tampaknya seseorang tidak boleh menggunakannya.Saya menemukan cara yang relatif sederhana (namun sedikit tidak konvensional) untuk menyimpan gambar matplotlib saya. Ini bekerja seperti ini:
dengan fungsi yang
save_plot
didefinisikan seperti ini (versi sederhana untuk memahami logika):atau mendefinisikan fungsi
save_plot
seperti ini (versi yang lebih baik menggunakan kompresi zip untuk menghasilkan file gambar yang lebih ringan):Ini membuat saya menggunakan modul
libscript
sendiri, yang sebagian besar bergantung pada modulinspect
danast
. Saya dapat mencoba membagikannya di Github jika ada minat yang diungkapkan (pertama-tama perlu pembersihan dan saya harus memulai dengan Github).Ide di balik
save_plot
fungsi danlibscript
modul ini adalah untuk mengambil instruksi python yang membuat gambar (menggunakan modulinspect
), menganalisisnya (menggunakan modulast
) untuk mengekstrak semua variabel, fungsi, dan impor modul yang diandalkan, mengekstraknya dari konteks eksekusi dan membuat serialisasi. sebagai instruksi python (kode untuk variabel akan sepertit=[0.0,2.0,0.01]
... dan kode untuk modul akan sepertiimport matplotlib.pyplot as plt
...) diawali dengan petunjuk gambar. Instruksi python yang dihasilkan disimpan sebagai skrip python yang eksekusinya akan membangun kembali gambar matplotlib asli.Seperti yang dapat Anda bayangkan, ini berfungsi dengan baik untuk sebagian besar (jika tidak semua) figur matplotlib.
sumber