使用pyplot一定要记得close

本文探讨了在Python的matplotlib库中使用pyplot进行循环绘图时,如何正确使用pyplot.close()避免图像叠加的问题。通过示例代码展示了在每次循环后关闭图像的重要性,确保每个训练集和测试集的图像独立呈现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、不关闭将会引起什么问题

在一个循环中,如果我们的目的是每一个循环都做一副图出来,如果做完一副图,没有使用pyplot.close(),就会使之前做过的图出现在下一副上,看下图:没有使用close

我们的目的

而如果你的目的是每一对train,test都做一张图,就要使用pyplot.close()每一次循环后关闭pyplot,即使在函数中也要这么做。改正后如下:每一张都如此

详细代码如下

    plt.plot(history.history['loss'], label='train_loss')
    plt.plot(history.history['val_loss'], label='val_loss')
    plt.legend()
    plt.savefig('fig_{}.jpg'.format(name))
    plt.close()  # 就是这里 一定要关闭
# -*- coding: utf-8 -*- import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_squared_error, r2_score from sklearn.model_selection import TimeSeriesSplit from skopt import BayesSearchCV from skopt.space import Integer, Real from scipy.stats import probplot import joblib # ================== 全局配置 ================== OUTPUT_DIR = r"D:\Undergraduate thesis\paper\results" # 结果统一保存目录 os.makedirs(OUTPUT_DIR, exist_ok=True) # 自动创建目录 # ================== 数据加载与预处理 ================== def load_data(file_path): df = pd.read_csv(file_path, parse_dates=['Date'], index_col='Date', encoding='gbk') df.sort_index(inplace=True) # 异常值处理(IQR方法) q1 = df['Close'].quantile(0.25) q3 = df['Close'].quantile(0.75) iqr = q3 - q1 df = df[(df['Close'] > q1 - 1.5*iqr) & (df['Close'] < q3 + 1.5*iqr)] return df.ffill() # 前向填充缺失值 # ================== 高级特征工程 ================== def create_features(df): # 滞后特征 for lag in [1, 3, 5, 10, 20]: df[f'Close_lag_{lag}'] = df['Close'].shift(lag) # 技术指标 df['MA5'] = df['Close'].rolling(5).mean() df['RSI'] = 100 - (100 / (1 + (df['Close'].diff(1).clip(lower=0).rolling(14).mean() / df['Close'].diff(1).clip(upper=0).abs().rolling(14).mean()))) df['MACD'] = df['Close'].ewm(span=12).mean() - df['Close'].ewm(span=26).mean() # 日期特征 df['DayOfWeek'] = df.index.dayofweek df['Is_Month_End'] = df.index.is_month_end.astype(int) return df.dropna() # ================== 贝叶斯优化模型 ================== def bayesian_optimization(X_train, y_train): search_spaces = { 'n_estimators': Integer(100, 500), 'max_depth': Integer(5, 30), 'min_samples_split': Integer(2, 20), 'min_samples_leaf': Integer(1, 10), 'max_features': Real(0.1, 1.0, prior='uniform') } opt = BayesSearchCV(
最新发布
03-28
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值