Matplot Изображение сжал Python - PullRequest
1 голос
/ 02 июня 2019

Я пытаюсь преобразовать код Matlab в Python.Вот код Python, который я пишу

import numpy as np
import numpy.matlib as nm
import matplotlib.pyplot as plt
N = 1000;     # time points
M =   20;     # channels
nTrials = 50; # number of trials
t = np.linspace(0,6*np.pi,N);
img=(nm.repmat(np.sin(t),M,1))
plt.imshow(img);
plt.colorbar()
plt.show()

Выход выглядит следующим образом:

python output

Код MATLAB

N = 1000;     % time points
M =   20;     % channels
nTrials = 50; % number of trials

% time vector (radian units)
t = linspace(0,6*pi,N);
img=repmat( sin(t),M,1 )
imagesc(img)

Вывод в Matlab выглядит следующим образом matlab output

В качестве альтернативы я пытаюсь сделать то же самое на простых данных образца MATLAB

C = [0 2 4 6; 8 10 12 14; 16 18 20 22];
imagesc(C)
colorbar

PYTHON

C =np.array([0, 2 ,4 ,6, 8, 10, 12, 14, 16, 18, 20, 22])
C=np.reshape(C,(3,4))
plt.imshow(C);
plt.colorbar()
plt.show()

Вывод изображения в обоих случаях одинаков sample data image

Я не понимаю, почему в синусоиде изображение сжимается

1 Ответ

1 голос
/ 02 июня 2019

Matlab автоматически масштабирует ось y в соответствии с x. Вот почему вы видите изображение почти в квадрате, даже если диапазон x в 50 раз больше, чем диапазон y.

Чтобы добиться аналогичного эффекта на matplotlib, попробуйте установить диапазон y, аналогичный x, например. установить М = 800. enter image description here

В качестве альтернативы, если вы не хотите изменять M, вы все равно можете масштабировать диапазон y с помощью matplotlib:

plt.imshow(img)
plt.axis('tight')
plt.colorbar()
plt.show()

enter image description here Обратите внимание, что в этом случае диапазон оси Y остается неизменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...