我想知道我如何能够使用matplotlib
例如这样的东西并排绘制图像:
我得到的最接近的是:
这是通过使用此代码生成的:
f, axarr = plt.subplots(2,2) axarr[0,0] = plt.imshow(image_datas[0]) axarr[0,1] = plt.imshow(image_datas[1]) axarr[1,0] = plt.imshow(image_datas[2]) axarr[1,1] = plt.imshow(image_datas[3])
但我似乎无法让其他图像显示出来.我认为必须有一个更好的方法来做到这一点,因为我想象试图管理索引将是一个痛苦.我查看了文档,虽然我有一种感觉,我可能会看错了.有人能够给我一个例子或指出我正确的方向吗?
你所面临的问题是,你尝试分配的收益imshow
(这是一个matplotlib.image.AxesImage
对现有的轴对象.
将图像数据绘制到不同轴的正确方法axarr
是
f, axarr = plt.subplots(2,2) axarr[0,0].imshow(image_datas[0]) axarr[0,1].imshow(image_datas[1]) axarr[1,0].imshow(image_datas[2]) axarr[1,1].imshow(image_datas[3])
所有子图的概念都相同,并且在大多数情况下,轴实例提供的方法与pyplot(plt)接口相同.例如,如果ax
是您的子绘图轴之一,用于绘制法线图,ax.plot(..)
而不是使用plt.plot()
.实际上,这可以在您链接到的页面的源代码中找到.
您正在一个轴上绘制所有图像.您想要的是单独获取每个轴的手柄并在那里绘制图像.像这样:
fig = plt.figure() ax1 = fig.add_subplot(2,2,1) ax1.imshow(...) ax2 = fig.add_subplot(2,2,2) ax2.imshow(...) ax3 = fig.add_subplot(2,2,3) ax3.imshow(...) ax4 = fig.add_subplot(2,2,4) ax4.imshow(...)
有关详细信息,请查看此处:http://matplotlib.org/examples/pylab_examples/subplots_demo.html
对于复杂的布局,您应该考虑使用gridspec:http://matplotlib.org/users/gridspec.html
我发现使用一件事很有帮助:
_, axs = plt.subplots(n_row, n_col, figsize=(12, 12)) axs = axs.flatten() for img, ax in zip(imgs, axs): ax.imshow(img) plt.show()