我已经看到有类似主题的问题,但是答案对我的问题不起作用。
我试图遍历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'
,但没有成功。当我选择一个不变的静态名称时,最后一个子项将保存到文件中。我读了一些与相关主题相关的帖子,但找不到能对我的问题有所帮助的帖子。
答案 0 :(得分:0)
year
是一个数据框。您不能将数据框格式化为可接受的文件名字符串。
使用类似
for i, year in enumerate(t_list):
# ...
plt.savefig('lala'+str(i)+'.png')
相反。