matplotlib中plt.figure()的注意事项

        比如有这样一个需求,我要画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),这里就要注意了,如果每次传的数字相同,返回的会是同一个画布,而且只要调用后,画布就一直在内存里,下次再调用的时候就会返回这个已经存在的画布。今天在改功能就掉进了这个坑,当我写两个循环时,发现画的图都重叠在一起了。

猜你喜欢

转载自blog.csdn.net/zy1620454507/article/details/128375161