Python:使用for循环在一个图中创建多个图

时间:2015-06-29 15:46:03

标签: python numpy matplotlib plot subplot

我尝试使用matplotlib创建一个2行,3列的网格图(每个图上都有多个数据)。然而,无论我尝试什么,最终保存的数字只是其中一个图,其余为空白。我知道另一个是制作出来的,但它们并没有出现在最终的图像中。这是我正在尝试的一个基本版本。

注释掉的部分显示了我见过的一些替代方案。

f,axarr = plt.subplots(2,3, sharex='col', sharey='row')

for i,someargs in enumerate(namelist):
    x1,y1,x2,y2 = somefunction(someargs)  #output data
    ax = axarr.flat[i]  #or ax=axarr[row,col]
    ax.plot(x1,y1)
    ax.plot(x2,y2)
plt.savefig("name")
#or f.savefig("name")

我这样做的方式有问题吗?我得到的图片位于http://i.imgur.com/QxYRnPT.png 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

以下是使用循环生成subplots的方法,您可以隐藏不需要的轴:

import pylab as plt
import numpy as np
fig ,axs=plt.subplots(2,3, sharex='col', sharey='row')
axs[-1,-1].axis('off')
namelist=['a','b','c','d','e']
ax=axs.ravel()
for i,someargs in enumerate(namelist):
    x1,y1,x2,y2 = somefunction(someargs)
    ax[i].plot(x1,y1)
    ax[i].plot(x2,y2)

答案 1 :(得分:0)

在花了一些时间仔细查看我正在运行的内容之后,我发现问题可能存在于我用来生成数据的函数以及它如何与循环交互的地方。实际上,使用基本测试数据不会产生任何问题。

这个函数做了很多事情(并且需要并行性),因此很难准确地说出它正在做什么。

我不确定出了什么问题,但我通过先存储数据,然后以我发布的方式或类似于其他答案的方式访问/绘制数据来解决问题。