цифра imshow () занадто мала


96

Я намагаюся візуалізувати масив numpy за допомогою imshow (), оскільки це схоже на imagesc () у Matlab.

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

Отримана цифра дуже мала в центрі сірого вікна, тоді як більша частина простору незайнята. Як я можу встановити параметри, щоб цифра стала більшою? Я спробував figsize = (xx, xx), і це не те, що я хочу. Дякую!


1
Просто додавши цей коментар на випадок, якщо інші, як я, намагаються приземлитися на цій посаді - проблема трапляється (найбільш помітно), коли дані x та y мають різні порядки; Відповідь @ bmu це виправляє
mwarrior

Відповіді:


142

Якщо ви не надасте 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-рівний


окрім визначення пропорції, чи можна отримати (визначити) розмір кольорових плиток?
Олександр Цська

36

Це дивно, це точно працює для мене:

from matplotlib import pyplot as plt

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

Я використовую серверну систему "MacOSX", до речі.


4
щоб бути зрозумілим, це повинно бути, plt.figure(figsize = (x_new, y_new))а для imgshow () ви зараз повинні імпортувати ioimage, тому що SciPy imageshow () незабаром буде застарілим
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).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.