matplotlib:figimage 未显示在 Jupyter 笔记本中
Posted
技术标签:
【中文标题】matplotlib:figimage 未显示在 Jupyter 笔记本中【英文标题】:matplotlib: figimage not showing in Jupyter notebook 【发布时间】:2018-02-26 22:32:35 【问题描述】:我正在尝试以真实尺寸(未缩放或拉伸)渲染图像,使用 matplotlib 执行此操作的最简单方法似乎是 figimage
。
但是,当我尝试在 Jupyter 笔记本中使用它时,该图不显示。其他情节显示正常,这似乎只影响figimage
:
如您所见,第一个情节显示良好,但第二个情节却没有。我做错了什么?
当我在 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】:figimage
只为当前图形添加背景。如果您没有已经存在的图形,则该命令不会渲染任何内容。以下 sn-p 将在 IPython Notebook 内部和外部工作:
%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()
但是,它并没有达到您想要/期望的效果。为了以真实尺寸渲染图像,您必须使用figsize
和dpi
,就像其他人之前尝试过的[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 没错,简短的回答是figimage
仅用于背景。至于子图,不是完全必要的,您可以用plt.xticks([])
替换所有这些命令(其他命令也类似),但我喜欢用fig
和axes
编码,因为我认为它使代码更清晰,尤其是当您有多个子图时。如果您将第一个命令替换为 plt.figure(.......)
,它的作用完全相同。以上是关于matplotlib:figimage 未显示在 Jupyter 笔记本中的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib 绘图未在 sublimetext 中显示