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

Plotly绘制yfinance获取的黄金K线图存在数据缺失如何解决

Plotly绘制黄金K线数据缺失问题修复

问题原因

  • 渲染逻辑差异:Plotly蜡烛图默认使用连续时间轴,会自动预留非交易时段(休市、周末、节假日、合约换月间隙)的空白位置,视觉上看起来像数据断档缺失;而mplfinance默认自动跳过无数据的时间点,将有数据的K线连续排列,因此不会出现断档。
  • 数据结构兼容问题:新版yfinance下载单标的行情时默认返回多级列结构,直接提取Open/High/Low/Close列会得到嵌套结构,传给Plotly时会出现部分数据解析失败,导致实际渲染数据不全。

修复方案

两处调整即可对齐mplfinance的渲染效果:

  1. 下载数据后拍平多级列,避免数据解析错误
  2. 将X轴设置为分类轴,强制按实际存在数据的时间点顺序排列K线,跳过无数据的时间间隙

修复后的可运行代码:

import plotly.graph_objects as go
import yfinance as yf

# 获取黄金5分钟行情
data = yf.download(tickers="GC=F", period="5d", interval="5m")
# 拍平yfinance返回的多级列
data.columns = data.columns.droplevel(1)

fig = go.Figure(data=[go.Candlestick(
    x=data.index,
    open=data['Open'],
    high=data['High'],
    low=data['Low'],
    close=data['Close']
)])

fig.update_layout(
    xaxis_rangeslider_visible=False,
    # 配置X轴为分类轴,消除非交易时段空白
    xaxis_type='category'
)

# 若需要保留连续时间轴的交互能力(如自定义时间刻度、时间维度缩放),可替换上面的xaxis_type配置,用rangebreaks手动屏蔽非交易时段
# fig.update_xaxes(
#     rangebreaks=[
#         dict(bounds=["sat", "mon"]), # 隐藏周末
#         dict(bounds=[17, 18], pattern="hour") # 隐藏黄金期货美东时间17-18点的固定休市时段
#     ]
# )

fig.write_html('first_figure.html', auto_open=True)

验证说明:用同一份数据分别跑修复后的Plotly代码和mplfinance代码,K线数量、开高低收数值完全一致,不会再出现数据缺失的视觉问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:25