You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python线性回归图表日期间隔设为3天的代码修改及错误修复

问题解决与代码修改

报错原因分析

  • plt.show()调用时机错误:plt.show()会释放当前绘图资源,之后调用plt.gca()会创建新的空白坐标轴,导致设置边界时出现维度错误。
  • 日期范围与实际数据不匹配:代码中set_xbound用了2020年的日期,但实际数据是2022年的,逻辑矛盾。
  • 线性回归输入类型错误:LinearRegression不能直接处理datetime类型数据,需要转换为数值型(如时间戳)。
  • 日期间隔设置不符合需求:代码里设的是15天,而需求是每3天显示一次。

修改后的完整代码

import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

dict_data_confirm = {
    '2022-01-30': 50, '2022-01-31': 152, '2022-02-01': 41, '2022-02-02': 50,
    '2022-02-03': 50, '2022-02-04': 50, '2022-02-05': 50, '2022-02-06': 50,
    '2022-02-07': 50, '2022-02-08': 50, '2022-02-09': 50, '2022-09-30': 50
}

# 数据整理
df = pd.Series(dict_data_confirm, name='Amount').rename_axis('Date').reset_index()
df['Date'] = pd.to_datetime(df['Date'])

# 线性回归处理:将日期转换为时间戳数值
df['timestamp'] = df['Date'].astype('int64') // 10**9  # 转成秒级时间戳
x = df[['timestamp']]
y = df['Amount']

lr = LinearRegression()
lr.fit(x, y)

# 绘图
plt.figure(figsize=(10,6))
plt.scatter(df['Date'], y, color='black')

# 生成回归线的预测值,用原始日期做x轴显示
pred_y = lr.predict(x)
plt.plot(df['Date'], pred_y, color='blue', linewidth=1)

# 设置x轴日期格式与间隔
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=3))  # 每3天显示一个刻度
plt.gca().xaxis.set_tick_params(rotation=30)

# 设置图表标题与坐标轴标签
plt.title('Purchase Data')
plt.ylabel('Amount')
plt.xlabel('Date')

# 设置x轴边界(匹配实际数据范围)
plt.gca().set_xbound(df['Date'].min(), df['Date'].max())

# 最后调用show显示图表
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

关键修改点说明

  • 调整plt.show()位置:把所有坐标轴设置、格式调整放在plt.show()之前,确保操作的是当前绘图的坐标轴。
  • 日期转数值用于回归:将datetime类型转换为时间戳(整数),作为线性回归的输入特征,解决模型无法处理日期类型的问题。
  • 修正日期间隔:把DayLocator(interval=15)改为interval=3,实现每3天显示一个刻度的需求。
  • 匹配数据的日期边界:用数据的最小和最大日期设置x轴边界,避免硬编码错误的年份。
  • 添加tight_layout():自动调整图表布局,防止旋转后的x轴标签被截断。

内容的提问来源于stack exchange,提问作者William Page

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:13:15