Pertanyaan Menyimpan angka setelah menjalankan pyplot.show () akan menghasilkan file kosong


Kode contoh berikut menghasilkan plot sederhana, kemudian menyimpannya ke 'fig1.pdf', kemudian menampilkannya, lalu menyimpannya lagi ke 'fig2.pdf'. Gambar pertama terlihat seperti yang diharapkan, tetapi yang kedua kosong (berisi kotak putih). Apa yang sebenarnya terjadi di sini? Garis plt.show()  tampaknya mengacaukan sesuatu, tapi aku tidak tahu apa / bagaimana!

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100)
y = x**2
plt.plot(x,y)
plt.savefig('fig1.pdf')
plt.show()
plt.savefig('fig2.pdf')

32
2018-02-19 08:53


asal


Jawaban:


Jika Anda ingin menyimpan gambar setelah menampilkannya, Anda harus mempertahankan contoh gambar. Alasan itu plt.savefig tidak berfungsi setelah menelepon show adalah angka saat ini telah diatur ulang.

pyplot melacak angka, kapak, dll. "saat ini" (yaitu belum ditampilkan dengan show) dibalik layar. gcf dan gca dapatkan contoh arus dan sumbu sumbu saat ini, masing-masing. plt.savefig (dan intinya yang lain pyplot metode) hanya lakukan plt.gcf().savefig(...). Dengan kata lain, dapatkan contoh angka saat ini dan hubungi savefig metode. Demikian pula plt.plot pada dasarnya tidak plt.gca().plot(...).

Setelah show disebut, daftar angka dan sumbu "saat ini" kosong.

Secara umum, Anda lebih baik menggunakan contoh gambar dan sumbu secara langsung untuk merencanakan / menyimpan / menampilkan / dll, daripada menggunakan plt.plot, dll, untuk secara implisit mendapatkan angka / kapak dan plot saat ini. Tidak ada yang salah dengan menggunakan pyplot untuk semuanya (terutama secara interaktif), tetapi membuatnya lebih mudah untuk menembak diri sendiri di kaki.

Menggunakan pyplot untuk plt.show() dan untuk menghasilkan figur dan objek sumbu (s), tetapi kemudian menggunakan metode angka atau sumbu secara langsung. (misalnya. ax.plot(x, y) dari pada plt.plot(x, y), dll. Keuntungan utama dari ini adalah bahwa itu eksplisit. Anda tahu objek apa yang sedang Anda garap, dan tidak perlu beralasan tentang apa yang dilakukan mesin negara-pyplot (meskipun tidak sulit untuk memahami antarmuka mesin-negara, juga).

Sebagai contoh cara "merekomendasikan" melakukan sesuatu, lakukan sesuatu seperti:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')

Jika Anda lebih suka menggunakan pyplot antarmuka untuk semuanya, lalu ambil contoh gambar sebelum Anda menelepon show. Sebagai contoh:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 100)
y = x**2

plt.plot(x, y)
fig = plt.gcf()
fig.savefig('fig1.pdf')
plt.show()
fig.savefig('fig2.pdf')

40
2018-02-19 14:58



pyplot.show memblokir dan menghancurkan rencana saat penutupan. Kamu dapat memakai

plt.show(block=False)

setelah itu simpan ke fig2.pdf akan berfungsi atau Anda bisa memplotnya lagi sebelum menyimpan

plt.plot(x,y)
plt.savefig('fig2.pdf')

3
2018-02-19 09:21



Saya harus lari plt.cla() dan plt.clf() sebelum merencanakan yang kedua. Bersihkan sumbu saat ini dan petak jelas saat ini, masing-masing.


1
2017-08-30 18:11