比如有这样一个需求,我要画10个图然后画一个,保存一个,这时候我可能要这样写代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from utils import *
from datetime import datetime
from utils import *
df = pd.DataFrame({
'a': np.arange(0,10),
'b': np.arange(1,11),
'c': np.arange(2,12),
})
for i in range(len(df.columns)):
fig = plt.figure()
ax = fig.add_subplot(111)
print(id(fig))
ax.scatter(df['a'],df['b'])
plt.savefig(df.columns[i]+'.png')
f1 = plt.figure(0)
f2 = plt.figure(0)
f3 = plt.figure(0)
print(id(f1))
print(id(f2))
print(id(f3))
这里我每个循环调用一下plt.figure(),生成一个新的画布,怎么保证是新的画布,这个从后面我打印的id可以看到,然后绘图保存,这个函数有个参数,就是传一个数字,也就是可以写成这样plt.figure(i),这里就要注意了,如果每次传的数字相同,返回的会是同一个画布,而且只要调用后,画布就一直在内存里,下次再调用的时候就会返回这个已经存在的画布。今天在改功能就掉进了这个坑,当我写两个循环时,发现画的图都重叠在一起了。