You need to enable JavaScript to run this app. Julia中绘制DataFrame叠加简单移动平均线出现日期显示异常问题
优惠活动
大模型
产品
解决方案
定价
更多

Julia中绘制DataFrame叠加简单移动平均线出现日期显示异常问题

问题根因分析
  • 核心问题:叠加SMA线时未指定对应的x轴序列,导致坐标维度不匹配
  • 次要问题:Date列未转换为标准Date类型,存在兼容性隐患

你仅传入SMA的y值给plot!()时,Plots.jl会默认使用1:length(y)的整数索引作为x轴,而你初始绘制收盘价时用的x轴是真实日期序列(Plots内部会将Date类型转换为万级别的时间戳数值),两套x轴的数值范围完全错位,最终表现为SMA线位置偏移、日期显示错乱。
你之前尝试排序DataFrame的操作无法生效,是因为排序后绘制SMA时依然没有传入对应的日期x轴,还是使用默认索引作为x,本质问题没有解决。

修正步骤

1. 补全数据预处理

首先加载Dates库,将Any类型的Date列转换为标准Date类型,同时提前完成日期排序:

using DataFrames, XLSX, StatsPlots, Indicators, Dates
df = DataFrame(XLSX.readtable("Demo-sv.xlsx", "Blad3")...)
# 转换Date列为标准Date类型,避免兼容性问题
df[!, :Date] = Date.(df.Date)
df[!, :Closeprice] = Float64.(df.Closeprice)
# 直接原地排序,保证时间序列顺序正确
sort!(df, :Date)

2. 对齐坐标轴绘制SMA

叠加SMA时必须同时传入与SMA序列一一对应的日期x轴,不能仅传入y值:

# 先绘制基础收盘价折线图
@df df plot(:Date, :Closeprice, label="收盘价", xlabel="日期", ylabel="价格")
# 计算200周期SMA
sma_200 = sma(df.Closeprice, n=200)
# 叠加时同时传入日期x轴与SMA的y轴值
plot!(df.Date, sma_200, label="200周期简单移动平均线")

特殊情况处理

如果使用的指标库返回的SMA序列是截断格式(即仅返回可计算的有效部分,长度比原收盘价短n-1位),则需要匹配截取对应长度的日期序列:

# 匹配截取第200行到末尾的日期序列,和截断后的SMA对齐
plot!(df.Date[200:end], sma_200, label="200周期简单移动平均线")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 23:45:07