Я пытаюсь построить небольшое изображение в python, используя matplotlib, и хотел бы, чтобы отображаемые оси имели ту же форму, что и массив numpy, из которого он был сгенерирован, т. Е. Данные не подлежат повторной выборке. Другими словами, каждая запись в массиве должна соответствовать пикселю (или присутствию) на экране. Это кажется тривиальным, но даже после траления в интернете для некоторого времени, я не могу заставить его работать:matplotlib plot small image without resampling
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = np.random.rand(30,40)
fig = plt.figure()
fig.add_axes(aspect="equal",extent=[0, X.shape[1], 0, X.shape[0]])
ax = fig.gca()
ax.autoscale_view(True, False, False)
ax.imshow(X, cmap = cm.gray)
plt.show()
выглядит так, как будто код, который вы предоставили, имеет трюк, прямоугольная форма (40x30) сохраняется на графическом изображении, а пределы оси соответствуют форме изображения. Мне что-то не хватает в вашем вопросе? – gcalmettes
Извините, что моя фраза запутанна. Меня интересует что-то вроде функции imshow в matlab, где количество пикселей на экране соответствует количеству записей в матрице, т. Е. Оси не переустанавливаются в соответствии с размером фигуры. – user588241
Вы хотите иметь изображение без интерполяции? Если это так, просто измените код 'imshow' на' matshow' или добавьте 'interpolation = 'ближайшее'' в качестве параметра функции imshow. – carla