รูปของ imshow () เล็กเกินไป


101

ฉันพยายามมองเห็นอาร์เรย์ numpy โดยใช้ imshow () เนื่องจากมันคล้ายกับ imagesc () ใน Matlab

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

รูปที่ได้มีขนาดเล็กมากที่ตรงกลางของหน้าต่างสีเทาในขณะที่พื้นที่ส่วนใหญ่ไม่ว่าง ฉันจะตั้งค่าพารามิเตอร์เพื่อให้รูปใหญ่ขึ้นได้อย่างไร? ฉันลอง figsize = (xx, xx) แล้วมันไม่ใช่สิ่งที่ฉันต้องการ ขอบคุณ!


1
เพียงแค่เพิ่มความคิดเห็นนี้ในกรณีที่คนอื่น ๆ เช่นฉันต่อสู้เพื่อเข้าสู่โพสต์นี้ - ปัญหาเกิดขึ้น (เห็นได้ชัดที่สุด) เมื่อข้อมูล x และ y มีลำดับความสำคัญต่างกัน คำตอบของ @ bmu แก้ไขได้
mwarrior

คำตอบ:


151

หากคุณไม่aspectโต้แย้งimshowมันจะใช้ค่าสำหรับimage.aspectในmatplotlibrcไฟล์. ค่าเริ่มต้นสำหรับค่านี้ในใหม่คือmatplotlibrc equalดังนั้นimshowจะพล็อตอาร์เรย์ของคุณด้วยอัตราส่วนกว้างยาวเท่ากัน

หากคุณไม่ต้องการความเท่าเทียมกันคุณสามารถตั้งค่าaspectเป็นauto

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

ซึ่งให้รูปต่อไปนี้

imshow-auto

หากคุณต้องการอัตราส่วนภาพที่เท่ากันคุณต้องปรับเปลี่ยนfigsizeตามลักษณะ

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

ซึ่งให้คุณ:

imshow เท่ากัน


นอกจากการกำหนดอัตราส่วนภาพแล้วยังสามารถ (กำหนด) ขนาดของกระเบื้องสีได้หรือไม่?
Alexander Cska

40

มันแปลกมากสำหรับฉัน:

from matplotlib import pyplot as plt

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

ฉันใช้แบ็กเอนด์ "MacOSX" btw


5
เพื่อความชัดเจนต้องเป็น plt.figure(figsize = (x_new, y_new))และสำหรับ imgshow () ตอนนี้คุณต้องนำเข้า ioimage เนื่องจากภาพ SciPy () จะเลิกใช้งานเร็ว ๆ นี้
Agile Bean

1
@AgileBean มันจะมีประโยชน์ถ้าคุณจะแก้ไขโพสต์นี้ด้วยข้อมูลนั้นหรือเพิ่มเป็นคำตอบสำหรับคำถามนี้
baxx

2

ฉันยังใหม่กับ python เหมือนกัน นี่คือสิ่งที่ดูเหมือนจะทำในสิ่งที่คุณต้องการ

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

ฉันเชื่อว่านี่เป็นตัวกำหนดขนาดของผืนผ้าใบ


1

อัปเดตปี 2020

ตามที่ @baxxx ร้องขอนี่คือการอัปเดตเนื่องจากrandom.randเลิกใช้งานในขณะเดียวกัน

ใช้งานได้กับ 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')

แปลงนี้:

ป้อนคำอธิบายภาพที่นี่

ในการเปลี่ยนจำนวนสุ่มคุณสามารถทดลองnp.random.normal(0,1,(8,90))(ในที่นี้หมายถึง = 0, ค่าเบี่ยงเบนมาตรฐาน = 1)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.