m0_74420115 2024-05-01 18:40 采纳率: 71.9%
浏览 3

python绘图日期错误


import pandas as pd
import matplotlib.pyplot as plt
from tensorflow.keras.models import load_model
 
# 假设CSV文件的第一列是日期,且格式正确可被pd.to_datetime解析
file_path = r"D:\\findata.csv"  
df = pd.read_csv(file_path)
df['Date'] = pd.to_datetime(df.pop(df.columns[0]), format='%Y_%m_%d')
 
def extract_dates_for_prediction(df, pre_days):
    # 获取用于预测的日期范围,这里简化处理,实际情况需根据数据切分逻辑调整
    last_dates = df['Date'][-(pre_days + len(y_test)):]  # 包含最后一个用于预测的日期及其前pre_days天
    return last_dates[-len(y_test):]  # 取出与预测结果对应的部分
 
# ... (你的数据预处理和模型训练代码保持不变)
 
# 加载最佳模型并进行预测
best_model = load_model('./thebestmodel/7.8713men15lstm3dense2unit32.keras')
pre = best_model.predict(X_test)
 
# 提取正确的日期范围
correct_dates = extract_dates_for_prediction(df, pre_days)
 
# 绘制图表
plt.figure(figsize=(14, 7))
plt.plot(correct_dates, y_test, color='red', label='Actual Price')
plt.plot(correct_dates, pre, color='green', label='Predicted Price')
plt.title('Stock Price Prediction')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.xticks(rotation=45)  # 旋转X轴标签以便更好地显示
plt.show()

这是绘图的部分代码,画出来的图是从2010年开始的,怎么改变代码变为最近的日期开始绘图

  • 写回答

6条回答 默认 最新

  • 专家-皆知 2024-05-01 18:40
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    要使图表从最近的日期开始绘制,您需要确保在提取correct_dates时仅选择最新的日期范围。当前您的extract_dates_for_prediction函数设计为基于pre_daysy_test长度来获取日期,但如果您希望直接从最新日期开始,可以简化这个函数。以下是调整后的代码,专注于从数据的最末端开始选取日期,假设您希望绘图的日期范围与预测结果的长度相同。

    import pandas as pd
    import matplotlib.pyplot as plt
    # 注意:这里省略了模型加载和预测的代码,因为它们与问题核心不直接相关
    
    # 假设CSV文件的第一列是日期,且格式正确可被pd.to_datetime解析
    file_path = r"D:\\findata.csv"  
    df = pd.read_csv(file_path)
    df['Date'] = pd.to_datetime(df.pop(df.columns[0]))
    
    # 确保我们从最新的日期开始绘图,不需要特定的pre_days参数,直接使用预测数据的长度
    latest_dates = df['Date'][-len(y_test):]  # 直接取与y_test长度相同的最新日期
    
    # 绘制图表,假设pre和y_test已正确准备
    plt.figure(figsize=(14, 7))
    plt.plot(latest_dates, y_test, color='red', label='Actual Price')
    plt.plot(latest_dates, pre, color='green', label='Predicted Price')
    plt.title('Stock Price Prediction')
    plt.xlabel('Date')
    plt.ylabel('Price')
    plt.legend()
    plt.grid(True)
    plt.xticks(rotation=45)  # 旋转X轴标签以便更好地显示
    plt.xlim(latest_dates[0], latest_dates[-1])  # 确保x轴限制在最新的日期范围内
    plt.show()
    

    这段代码的关键在于直接从DataFrame的末尾选取与预测结果长度相等的日期范围,并在绘制图形时设置x轴的限制,确保图表只显示这些最新的日期。请注意,这段代码假设y_test和预测结果pre已经根据您的数据预处理和模型预测步骤准备好,并且它们的长度匹配。如果您的实际逻辑有所不同(例如,y_test的长度与预测日期不直接相关),您可能需要相应地调整逻辑。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月1日