фигура imshow () слишком мала

98

Я пытаюсь визуализировать массив numpy с помощью imshow (), поскольку он похож на imagesc () в Matlab.

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

В результате фигура очень маленькая в центре серого окна, в то время как большая часть пространства остается незанятой. Как настроить параметры, чтобы фигура была больше? Я пробовал figsize = (xx, xx), и это не то, что мне нужно. Благодарность!

Ruofeng
источник
1
Просто добавьте этот комментарий на тот случай, если другие, вроде меня, будут пытаться попасть в этот пост --- проблема возникает (наиболее заметно), когда данные x и y имеют разные порядки величины; Ответ @bmu исправляет это
mwarrior

Ответы:

147

Если вы не укажете 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-равный

БМУ
источник
Можно ли помимо определения соотношения сторон получить (определить) размер цветных плиток?
Александр Цска
37

Странно, у меня точно работает:

from matplotlib import pyplot as plt

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

Между прочим, я использую серверную часть MacOSX.

Николас
источник
5
чтобы было ясно, это должно быть, plt.figure(figsize = (x_new, y_new))и для imgshow () вы должны теперь импортировать ioimage, потому что SciPy imageshow () скоро будет устаревшим
Agile Bean
1
@AgileBean, было бы полезно, если бы вы либо отредактировали этот пост,
указав
2

Я тоже новичок в питоне. Вот что-то вроде того, что будет делать то, что вы хотите

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

Я считаю, что это решает размер холста.

Toylas
источник
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).

Agile Bean
источник