通过循环plt.savefig无法正常工作

时间:2018-07-17 11:41:03

标签: pandas for-loop matplotlib time-series

我已经看到有类似主题的问题,但是答案对我的问题不起作用。 我试图遍历dataframes(一个时间序列)列表,并为每个数据帧保存一个带有四个子图的图形。在我使用plt.savefig添加行之前,代码和循环可以正常工作(显示所有图)。我正在Spyder 3.1.4中使用Phyton 3.6。

当我添加plt.savefig命令时,仅显示循环中的第一个图,并且出现错误消息:

filename_or_obj = open(filename_or_obj, 'wb')

FileNotFoundError: [Errno 2] No such file or directory:

这是一些测试数据和代码

#non-fancy test data
dates = pd.date_range(start='2008-01-01 00:30:00',end='2018-01-01 00:00:00',freq='30T')
data1 = pd.DataFrame(np.random.randint(0,100,size=(175344, 4)),columns=list('ABCD'))
data2 = pd.DataFrame(np.random.randint(0,100,size=(175344, 4)),columns=list('ABCD'))
d1={'col_1': datetest, 'col_2': data1['D'],'col_3':data1['D'],'col_4': data1['D'],'col_5': data1['D'] }
d2={'col_1': datetest, 'col_2': data2['D'],'col_3':data2['D'],'col_4': data2['D'],'col_5': data2['D'] }
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2) 

#make a list
t_list=[df1,df2]

#start the loop for plotting
for year in t_list:
      ax1 = plt.subplot(411)
      ax2 = plt.subplot(412)
      ax3 = plt.subplot(413)
      ax4 = plt.subplot(414)
      ax1.plot_date(year.col_1,year.col_2)
      ax2.plot_date(year.col_1,year.col_2)
      ax3.plot_date(year.col_1,year.col_2)
      ax4.plot_date(year.col_1,year.col_4)
      plt.savefig('{}.png'.format(year))
      plt.close()

我也尝试了'lala'+str(year)+'.png',但没有成功。当我选择一个不变的静态名称时,最后一个子项将保存到文件中。我读了一些与相关主题相关的帖子,但找不到能对我的问题有所帮助的帖子。

1 个答案:

答案 0 :(得分:0)

year是一个数据框。您不能将数据框格式化为可接受的文件名字符串。

使用类似

for i, year in enumerate(t_list):
    # ...
    plt.savefig('lala'+str(i)+'.png')

相反。

相关问题