Ответ 1
Matplotlib не оптимизирован для этого. Вам будет немного лучше с более простыми вариантами, если вы просто хотите отобразить изображение с пикселем один пиксель. (Посмотрите, например, на Tkinter.)
Это было сказано:
import matplotlib.pyplot as plt
import numpy as np
# DPI, here, has _nothing_ to do with your screen DPI.
dpi = 80.0
xpixels, ypixels = 800, 800
fig = plt.figure(figsize=(ypixels/dpi, xpixels/dpi), dpi=dpi)
fig.figimage(np.random.random((xpixels, ypixels)))
plt.show()
Или, если вы действительно хотите использовать imshow
, вам нужно быть немного более подробным. Однако это имеет то преимущество, что вы можете увеличить масштаб и т.д., Если это необходимо.
import matplotlib.pyplot as plt
import numpy as np
dpi = 80
margin = 0.05 # (5% of the width/height of the figure...)
xpixels, ypixels = 800, 800
# Make a figure big enough to accomodate an axis of xpixels by ypixels
# as well as the ticklabels, etc...
figsize = (1 + margin) * ypixels / dpi, (1 + margin) * xpixels / dpi
fig = plt.figure(figsize=figsize, dpi=dpi)
# Make the axis the right size...
ax = fig.add_axes([margin, margin, 1 - 2*margin, 1 - 2*margin])
ax.imshow(np.random.random((xpixels, ypixels)), interpolation='none')
plt.show()