Saya perlu mengambil gambar dan menyimpannya setelah beberapa proses. Angka itu terlihat baik-baik saja ketika saya menampilkannya, tetapi setelah menyimpan gambar itu, saya mendapat ruang putih di sekitar gambar yang disimpan. Saya telah mencoba 'tight'
opsi untuk savefig
metode, tidak berhasil. Kode:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
fig = plt.figure(1)
img = mpimg.imread(path)
plt.imshow(img)
ax=fig.add_subplot(1,1,1)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches=extent)
plt.axis('off')
plt.show()
Saya mencoba menggambar grafik dasar dengan menggunakan NetworkX pada gambar dan menyimpannya. Saya menyadari bahwa tanpa grafik itu berfungsi, tetapi ketika menambahkan grafik saya mendapatkan ruang putih di sekitar gambar yang disimpan;
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1,3)
G.add_edge(1,2)
pos = {1:[100,120], 2:[200,300], 3:[50,75]}
fig = plt.figure(1)
img = mpimg.imread("C:\\images\\1.jpg")
plt.imshow(img)
ax=fig.add_subplot(1,1,1)
nx.draw(G, pos=pos)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches = extent)
plt.axis('off')
plt.show()
python
matplotlib
Ahmet Tuğrul Bayrak
sumber
sumber
Jawaban:
Saya tidak dapat mengklaim bahwa saya tahu persis mengapa atau bagaimana "solusi" saya bekerja, tetapi inilah yang harus saya lakukan ketika saya ingin merencanakan garis besar beberapa bagian aerofoil - tanpa margin putih - ke file PDF. (Perhatikan bahwa saya menggunakan matplotlib di dalam notebook IPython, dengan flag -pylab.)
Saya telah mencoba untuk menonaktifkan bagian yang berbeda dari ini, tetapi ini selalu mengarah pada margin putih di suatu tempat. Anda bahkan mungkin telah memodifikasi ini untuk menjaga garis-garis lemak di dekat batas gambar agar tidak dicukur oleh kurangnya margin.
sumber
set_major_locator
perlu menggunakan dua baris .pad_inches=0
yang tidak disebutkan jawaban lain.set_major_locator
adalah kunci bagi saya.pad_inches
membantuku.Anda dapat menghapus padding ruang putih dengan menetapkan
bbox_inches="tight"
disavefig
:Anda harus meletakkan argumen
bbox_inches
sebagai string, mungkin ini sebabnya tidak bekerja lebih awal untuk Anda.Kemungkinan duplikat:
Plot matplotlib: menghilangkan sumbu, legenda dan spasi putih
Bagaimana cara mengatur margin untuk angka matplotlib?
Kurangi margin kiri dan kanan di plot matplotlib
sumber
fig.savefig()
juga. (plt.savefig()
tidak akan bekerja dalam kasus itu.)bbox_inches
opsi itu, ada standar lain yang menyisakan sedikit ruang. Jika Anda benar-benar ingin menyingkirkan semuanya, Anda juga harus menggunakannyapad_inches=0.0
. Tentu saja, padding ketat seperti itu sering terputus, misalnya eksponen ...pad_inches=-0.1
Setelah mencoba jawaban di atas tanpa hasil (dan banyak posting stack lainnya) apa yang akhirnya berhasil untuk saya adalah adil
Yang penting ini tidak termasuk argumen bbox atau padding.
sumber
set_axis_off
. Ini tidak mempengaruhi gambar yang disimpan karena setelahsubplots_adjust
sumbu terletak di luar batas gambar dan dia tidak akan pernah terlihat. Namun, di notebook Jupyter, Anda perlu menonaktifkan sumbu secara eksplisit, karena backend inline menimpa pengaturan ini.Saya menemukan sesuatu dari Arvind Pereira ( http://robotics.usc.edu/~ampereir/wordpress/?p=626 ) dan sepertinya bekerja untuk saya:
sumber
transparent=True
akan membuatnya tampak seperti tidak ada masalah tetapi itu hanya akan menyembunyikan ruang putih, dimensi gambar tidak akan baik-baik saja.pad_inches
! Saya berharap saya tahu opsi ini sebelumnya!pad_inches=.25
Fungsi berikut menggabungkan jawaban johannes di atas. Saya telah mengujinya dengan
plt.figure
danplt.subplots()
dengan beberapa sumbu, dan bekerja dengan baik.sumber
Saya menemukan kode-kode berikut berfungsi dengan baik untuk pekerjaan itu.
sumber
Saya mengikuti urutan ini dan itu bekerja seperti pesona.
sumber
Bagi siapa pun yang ingin bekerja dalam piksel daripada inci, ini akan berfungsi.
Plus yang biasa Anda juga perlu
Kemudian Anda dapat menggunakan yang berikut ini:
sumber
fig.dpi
bukannyaPendekatan yang jauh lebih sederhana yang saya temukan adalah menggunakan
plt.imsave
:sumber
plt.savefig()
.Anda dapat mencoba ini. Itu memecahkan masalah saya.
sumber
Jika Anda ingin menampilkan apa yang harus disimpan, saya sarankan menggunakan
plt.tight_layout
transformasi yang sebenarnya lebih disukai karena tidak melakukan pemotongan yang tidak perlu saat menggunakanplt.savefig
sumber
Ini berfungsi untuk saya menyimpan array numpy diplot dengan imshow ke file
sumber