Matplotlib: 在Jupyter notebook中,figimage无法显示

6
我想尝试以真实尺寸(非缩放或拉伸)呈现图像,并且使用matplotlib最简单的方法似乎是使用figimage函数。
但是,在Jupyter笔记本中尝试使用它时,图形无法显示。其他绘图都显示正常,这只影响figimage函数:

figimage not showing

你可以看到,第一个图显示得很好,但第二个图没有显示。我做错了什么吗?
当我在IPython shell中运行以下代码时,图像如预期一样显示出来,所以可能是我的Jupyter设置有问题?
import matplotlib
from matplotlib import pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 500)
plt.plot(x, np.sin(x))
plt.show()

data = np.random.random((500,500))
plt.figimage(data)
plt.show()
1个回答

6

figimage 仅向当前图添加一个背景。如果您没有已经存在的图,该命令将不会呈现任何内容。下面的代码段可以在IPython笔记本中内外都运作:

%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

plt.figure()

x = np.linspace(0, 2 * np.pi, 500)
plt.plot(x, np.sin(x))

data = np.random.randn(500, 500)
plt.figimage(data)

plt.show()

然而,它并不能做到您想要/期望的效果。为了以真实尺寸呈现图像,您需要调整figsizedpi,就像其他人之前尝试过的一样[1][2][3][4]

data = np.random.randn(500, 500)
dpi = 80
shape = data.shape

fig, ax = plt.subplots(figsize=(shape[1]/float(dpi), shape[0]/float(dpi)), dpi=dpi, frameon=False)
ax.imshow(data, extent=(0,1,1,0))
ax.set_xticks([])  # remove xticks
ax.set_yticks([])  # remove yticks
ax.axis('off')     # hide axis
fig.subplots_adjust(bottom=0, top=1, left=0, right=1, wspace=0, hspace=0)  # streches the image and removes margins
fig.savefig('/tmp/random.png', dpi=dpi, pad_inches=0, transparent=True) # Optional: save figure
fig.show()

哦,我明白了。figimage 主要用于渲染背景,对吧?你的建议非常好(虽然我不完全理解子图的必要性),谢谢! - nfelger
1
@nfelger 没错,简短的回答是 figimage 只用于背景。至于子图,它们并不完全必要,你可以用 plt.xticks([])(和其他命令类似)替换所有这些命令,但我喜欢使用 figaxes 编码,因为我认为这使得代码更清晰,特别是当你有多个子图时。如果你用 plt.figure(.......) 替换第一个命令,它会做完全相同的事情。 - Imanol Luengo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接