sosok imshow () terlalu kecil

96

Saya mencoba untuk memvisualisasikan array numpy menggunakan imshow () karena mirip dengan imagesc () di Matlab.

imshow(random.rand(8, 90), interpolation='nearest')

Gambar yang dihasilkan sangat kecil di tengah jendela abu-abu, sementara sebagian besar ruang kosong. Bagaimana cara mengatur parameter untuk membuat gambar lebih besar? Saya mencoba figsize = (xx, xx) dan itu bukan yang saya inginkan. Terima kasih!

Ruofeng
sumber
1
Hanya menambahkan komentar ini jika orang lain seperti saya berjuang untuk mendarat di posting ini --- masalah terjadi (paling jelas) ketika data x dan y memiliki urutan besaran yang berbeda; Jawaban @ bmu memperbaikinya
mwarrior

Jawaban:

142

Jika Anda tidak memberikan aspectargumen ke imshow, itu akan menggunakan nilai for image.aspectdi matplotlibrc. Default untuk nilai ini di new matplotlibrcadalah equal. Jadi imshowakan plot array Anda dengan rasio aspek yang sama.

Jika Anda tidak perlu aspek yang sama Anda dapat mengatur aspectuntukauto

imshow(random.rand(8, 90), interpolation='nearest', aspect='auto')

yang memberikan gambar berikut

imshow-auto

Jika Anda menginginkan rasio aspek yang sama, Anda harus menyesuaikannya figsizedengan aspek tersebut

fig, ax = subplots(figsize=(18, 2))
ax.imshow(random.rand(8, 90), interpolation='nearest')
tight_layout()

yang memberi Anda:

imshow-equal

bmu
sumber
selain menentukan rasio aspek, apakah mungkin untuk mendapatkan (menentukan) ukuran ubin berwarna?
Alexander Cska
36

Aneh, ini pasti berhasil untuk saya:

from matplotlib import pyplot as plt

plt.figure(figsize = (20,2))
plt.imshow(random.rand(8, 90), interpolation='nearest')

Saya menggunakan backend "MacOSX", btw.

Nikolas
sumber
4
agar jelas, itu harus plt.figure(figsize = (x_new, y_new))dan untuk imgshow () Anda sekarang harus mengimpor ioimage karena SciPy imageshow () akan segera dihentikan
Agile Bean
1
@AgileBean akan berguna jika Anda mengedit posting ini dengan informasi itu atau menambahkannya sebagai jawaban untuk pertanyaan ini
baxx
2

Saya juga baru mengenal python. Ini adalah sesuatu yang sepertinya akan melakukan apa yang Anda inginkan

axes([0.08, 0.08, 0.94-0.08, 0.94-0.08]) #[left, bottom, width, height]
axis('scaled')`

Saya yakin ini menentukan ukuran kanvas.

toylas
sumber
1

Perbarui 2020

seperti yang diminta oleh @baxxx, berikut ini pembaruan karena random.randsementara itu sudah usang.

Ini bekerja dengan matplotlip 3.2.1:

from matplotlib import pyplot as plt
import random
import numpy as np

random = np.random.random ([8,90])

plt.figure(figsize = (20,2))
plt.imshow(random, interpolation='nearest')

Plot ini:

masukkan deskripsi gambar di sini

Untuk mengubah bilangan acak, Anda dapat bereksperimen dengan np.random.normal(0,1,(8,90))(di sini mean = 0, deviasi standar = 1).

Kacang Agile
sumber