我必须使用for循环加载3个numpy文件。加载数据后,我想绘制3个子图,因为我想在它们之间进行比较。如果我不申请循环并一一加载文件,那么我可以轻松地做到这一点。但是有什么方法可以在for循环中加载数据,然后进行3个子图绘制。
fig = plt.figure()
ax1 = fig.add_subplot(311)
ax2 = fig.add_subplot(312)
ax3 = fig.add_subplot(313)
ind1 =[1,2,3]
ind2 = [4,5,6]
for i in range(len(3)):
data1=np.load(..)
data2=np.load(..)
ax1.plot(data1, data2)
答案 0 :(得分:2)
在不知道文件包含什么以及文件外观的情况下,这是您可以适应示例的基本概念。在这里,我将要读取的文件名存储在列表中,然后一次遍历一个子图。我使用enumerate
来获取轴实例和 index ,以便我可以一次访问/移动文件。附注:我以np.loadtxt
为例。您基本上可以用任何想要加载文件的方式来替换命令。
您也可以使用axes.ravel()
或axes.flatten()
代替axes.flat
。
fig, axes = plt.subplots(nrows=3, ncols=1)
files = ['file1.txt', 'file2.txt', 'file3.txt']
for i, ax in enumerate(axes.ravel()): # or axes.flatten() or axes.flat
data1=np.loadtxt(files[i])
data2=np.loadtxt(files[i])
ax.plot(data1, data2)
plt.tight_layout() # To get a better spacing between the subplots
不使用Tom de Geus建议的替代解决方案是:
ravel
以下是一个简单的示例来说明这个想法(可以使用上述替代解决方案完成此操作)
enumerate