我正在跟踪Imagegrid上matplotlib文档中的示例,并且尝试从Jupyter笔记本中复制它:
% matplotlib inline
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import numpy as np
im = np.arange(100)
im.shape = 10, 10
fig = plt.figure(1, (4., 4.))
grid = ImageGrid(fig, 111, # similar to subplot(111)
nrows_ncols=(2, 2), # creates 2x2 grid of axes
axes_pad=0.1, # pad between axes in inch.
)
for i in range(4):
grid[i].imshow(im) # The AxesGrid object work as a list of axes.
plt.show()
预期输出:
我得到的是什么
如您所见,我没有得到图像的网格。我在做什么错了?
编辑
如果我删除了%matplotlib inline
选项,我就得到了(cell[1]
证明我重新启动了内核):
未显示图。
我正在运行matplotlib
版本3.0.0
,并用conda list matplotlib
检查,jupyter
是4.4.0
,并用jupyter --version
检查。在Windows 10上,Anaconda,python 3.6。
答案 0 :(得分:2)
这是issue with matplotlib 3.0.0。现在,它已been fixed,因此在即将发布的3.0.1错误修正版本中将不会发生。
在此期间,您有两个选择。
决定在使用%matplotlib inline
时不裁剪图像。通过
%config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
在IPython或Jupyter中。
答案 1 :(得分:0)
删除
%matplotlib inline
,然后重新启动所有内容,或将其放在单独的单元格中,如下所示。看起来,在绘制之前,魔术命令始终总是需要在单独的单元中运行;如果在内核需要重新启动之前运行,它总是需要运行。看这里 enter link description here
,它将起作用。 %matplotlib内联不需要在jupyter中渲染图,这只是一个方便。当调用plt.show()时将渲染图。
我在jupyter中使用mpl遇到了这个问题。我认为问题在于,magic命令导致它在可用时立即渲染任何图,而不是mpl(等待直到被告知渲染以及如何渲染)。
完整的示例代码直接来自您在问题中链接的mpl示例:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import numpy as np
im = np.arange(100)
im.shape = 10, 10
fig = plt.figure(1, (4., 4.))
grid = ImageGrid(fig, 111, # similar to subplot(111)
nrows_ncols=(2, 2), # creates 2x2 grid of axes
axes_pad=0.1, # pad between axes in inch.
)
for i in range(4):
grid[i].imshow(im) # The AxesGrid object work as a list of axes.
plt.show() # Renders all available axes when called