import matplotlib.pyplot as plt
import numpy as np
# DPI, here, has _nothing_ to do with your screen's 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()
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()
5条答案
按热度按时间dly7yett1#
Matplotlib没有为此进行优化。如果你只想以一个像素对一个像素的方式显示图像,那么使用更简单的选项会更好。(例如,看看Tkinter。)
话虽如此说:
或者,如果你真的想使用
imshow
,你就需要更详细一点。然而,这有一个好处,允许你在需要的时候放大等等。nhhxz33t2#
如果你真的不需要matlibplot,这里是我最好的方法
使用
showbytes()
显示图像字节字符串,使用showarray()
显示数字数组。ffscu2ro3#
如果你在Jupyter笔记本上工作,安装了
pillow
(Python Imaging Library),并且不需要色彩Map表,那么Image.fromarray
就很方便了,你只需要把数据转换成它可以使用的形式(np.uint8
或bool
):或者如果您有一个布尔数组:
1rhkuytd4#
这是一个使用
imshow
的公认答案的修改版本,它对我来说是有效的,至少对正方形图像是有效的(它似乎不总是对非正方形图像有效)。这个答案与公认答案之间的差异是轴的宽度和高度不同,以及每个维度加上
1
以及margin
乘以2
的figsize。jecbmhm35#
如果您正在尝试放大图像,则: