Saya mencoba membuat plot persegi (menggunakan imshow), yaitu rasio aspek 1: 1, tetapi saya tidak bisa. Tak satu pun dari pekerjaan ini:
import matplotlib.pyplot as plt
ax = fig.add_subplot(111,aspect='equal')
ax = fig.add_subplot(111,aspect=1.0)
ax.set_aspect('equal')
plt.axes().set_aspect('equal')
Sepertinya panggilan hanya diabaikan (masalah yang sering saya alami dengan matplotlib).
python
matplotlib
jtlz2.dll
sumber
sumber
ax.axis('equal')
, secara kebetulan? Seperti yang dikatakan semua orang, apa yang Anda lakukan harus berhasil, tetapiax.axis
mungkin merupakan cara lain untuk mencoba mencari solusi.Jawaban:
Ketiga kali pesona. Dugaan saya ini adalah bug dan jawaban Zhenya menyarankan itu diperbaiki di versi terbaru. Saya memiliki versi 0.99.1.1 dan saya telah membuat solusi berikut:
Ini adalah 'force.png':
Di bawah ini adalah upaya saya yang gagal, namun semoga informatif.
Jawaban Kedua:
'Jawaban asli' saya di bawah ini berlebihan, karena mirip dengan
axes.set_aspect()
. Saya pikir Anda ingin menggunakanaxes.set_aspect('auto')
. Saya tidak mengerti mengapa ini terjadi, tetapi menghasilkan plot gambar persegi untuk saya, misalnya skrip ini:Menghasilkan plot gambar dengan rasio aspek 'sama': dan plot dengan rasio aspek 'otomatis':
Kode yang diberikan di bawah ini dalam 'jawaban asli' memberikan titik awal untuk rasio aspek yang dikontrol secara eksplisit, tetapi tampaknya diabaikan begitu imshow dipanggil.
Jawaban Asli:
Berikut adalah contoh rutinitas yang akan menyesuaikan parameter subplot sehingga Anda mendapatkan rasio aspek yang diinginkan:
Ini menghasilkan sosok seperti:
Saya dapat membayangkan jika Anda memiliki beberapa subplot dalam gambar, Anda ingin memasukkan jumlah subplot y dan x sebagai parameter kata kunci (masing-masing default ke 1) ke rutin yang disediakan. Kemudian menggunakan angka-angka dan
hspace
danwspace
kata kunci, Anda dapat membuat semua subplot memiliki aspek rasio yang benar.sumber
get_images
ada daftar kosong (seperti yang akan terjadi denganax.plot([0,1],[0,2])
, Anda dapat menggunakanget_xlim
danget_ylim
Apa
matplotlib
versi yang Anda jalankan? Saya baru-baru ini harus meningkatkan ke1.1.0
, dan dengan itu,add_subplot(111,aspect='equal')
berfungsi untuk saya.sumber
matplotlib
versi2.0.2
.jupyter notebook
versi5.0.0
. Terima kasih.Setelah bertahun-tahun sukses dengan jawaban di atas, saya merasa ini tidak berfungsi lagi - tetapi saya menemukan solusi yang berfungsi untuk subplot di
https://jdhao.github.io/2017/06/03/change-aspect-ratio-in-mpl
Dengan kredit penuh tentu saja kepada penulis di atas (yang mungkin lebih suka memposting di sini), baris yang relevan adalah:
Tautan juga memiliki penjelasan yang sangat jelas tentang sistem koordinat berbeda yang digunakan oleh matplotlib.
Terima kasih atas semua jawaban bagus yang diterima - terutama @ Yann yang akan tetap menjadi pemenang.
sumber
Anda harus mencoba dengan figaspect. Ini bekerja untuk saya. Dari dokumen:
Sunting: Saya tidak yakin dengan apa yang Anda cari. Kode di atas mengubah kanvas (ukuran plot). Jika Anda ingin mengubah ukuran jendela matplotlib, dari gambar, gunakan:
ini menghasilkan jendela 5x1 (wxh).
sumber
Jawaban ini berdasarkan jawaban Yann. Ini akan mengatur rasio aspek untuk plot linier atau log-log. Saya telah menggunakan informasi tambahan dari https://stackoverflow.com/a/16290035/2966723 untuk menguji apakah sumbu berskala log.
Jelas Anda dapat menggunakan versi apa pun yang
log
Anda inginkan, saya telah menggunakanscipy
, tetapinumpy
ataumath
seharusnya baik-baik saja.sumber