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

使用yfinance与Plotly在Python 2.7中绘制Yahoo Finance EUR/USD蜡烛图时出现空白窗口的问题排查

使用yfinance和Plotly在Python 2.7绘制EUR/USD蜡烛图的问题排查与解决

问题背景

我正在用yfinance和Plotly库(Python 2.7)获取欧元/美元(EUR/USD)数据并绘制蜡烛图,但绘制出的图表是空白的,想搞清楚问题出在哪以及怎么修复。

数据下载代码

我从Yahoo Finance下载数据的代码如下:

import yfinance as yf
data = yf.download(tickers='EURUSD=X', period='1d', interval='30m')

数据示例

执行data.tail(10)得到的结果:

Open      High       Low     Close  Adj Close  Volume
Datetime                                                                  
2022-02-25 17:30:00+00:00  1.125239  1.125239  1.124101  1.124354  1.124354       0
2022-02-25 18:00:00+00:00  1.124480  1.125873  1.124480  1.125492  1.125492       0
2022-02-25 18:30:00+00:00  1.125619  1.126507  1.125619  1.126126  1.126126       0
2022-02-25 19:00:00+00:00  1.125999  1.126507  1.125492  1.126253  1.126253       0
2022-02-25 19:30:00+00:00  1.126634  1.126888  1.125366  1.126634  1.126634       0
2022-02-25 20:00:00+00:00  1.126888  1.127015  1.126126  1.126634  1.126634       0
2022-02-25 20:30:00+00:00  1.126507  1.127650  1.126507  1.127015  1.127015       0
2022-02-25 21:00:00+00:00  1.127142  1.127523  1.126761  1.127523  1.127523       0
2022-02-25 21:30:00+00:00  1.127650  1.127777  1.127396  1.127777  1.127777       0
2022-02-25 22:00:00+00:00  1.127142  1.127142  1.127142  1.127142  1.127142       0

尝试的蜡烛图代码

我试了下面的代码绘制蜡烛图,但弹出窗口全是空白:

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

问题分析与解决方案

核心问题

你获取x轴数据的方式错了:data.select_dtypes(['datetime64'])返回的是一个DataFrame(因为时间数据是你的DataFrame索引,不是普通列),但Plotly的Candlestick组件的x参数需要一维的时间序列数据,不是DataFrame。另外要注意,Python 2.7只支持Plotly 4.x及以下版本,如果你装了Plotly 5+的话也会出问题。

修复后的代码

方法1:直接用DataFrame的索引

既然时间数据是索引,直接调用data.index就可以:

import yfinance as yf
import plotly.graph_objects as go

# 下载数据
data = yf.download(tickers='EURUSD=X', period='1d', interval='30m')

# 绘制蜡烛图
fig = go.Figure(data=[go.Candlestick(
    x=data.index,
    open=data['Open'],
    high=data['High'],
    low=data['Low'],
    close=data['Close']
)])

# 可选:给图表加些美化设置
fig.update_layout(
    title='EUR/USD 30分钟蜡烛图',
    xaxis_title='时间',
    yaxis_title='汇率',
    xaxis_rangeslider_visible=False  # 隐藏底部的范围滑块
)

fig.show()

方法2:把索引转为列再使用

如果你想把时间索引转成单独的列来用,可以这么做:

import yfinance as yf
import plotly.graph_objects as go

data = yf.download(tickers='EURUSD=X', period='1d', interval='30m')
# 将索引转为普通列
data['Datetime'] = data.index

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

fig.update_layout(title='EUR/USD 30分钟蜡烛图')
fig.show()

额外注意事项

  • 确保安装的库版本兼容Python 2.7:
    pip install yfinance==0.1.67  # 这个版本支持Python 2.7
    pip install plotly==4.14.3    # Plotly 4.x最后一个支持Python 2.7的版本
    
  • 如果运行后还是没显示图表,试试生成HTML文件查看:
    import plotly.offline as pyo
    pyo.plot(fig, filename='eurusd_candlestick.html')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:48:11