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

使用matplotlib绘制Binance与FTX交易数据折线图仅显示单条线求助

问题根因

该问题有两个常见触发原因:

  • ccxt接口返回的ts字段为13位毫秒级Unix时间戳,直接传入matplotlib绘图时会被识别为普通数值而非时间序列,若两个平台返回的时间区间不完全对齐,x轴范围会被拉伸导致其中一条折线超出可视区域。
  • Binance与FTX的BTC/USDT现货交易量存在数量级差异,相同y轴下数值较小的折线会贴近坐标轴,视觉上像被覆盖没有显示。

修复后完整代码

# All Imports
import ccxt
import pandas as pd
import matplotlib.pyplot as plt
# 初始化交易所实例
binance = ccxt.binance()
ftx = ccxt.ftx()
# 获取OHLCV数据
binance_btc_usdt_ohlcv = binance.fetch_ohlcv('BTC/USDT','1d',limit=100)
ftx_btc_usdt_ohlcv = ftx.fetch_ohlcv('BTC/USDT','1d',limit=100)
# 转为DataFrame并处理时间格式
df_binance = pd.DataFrame(binance_btc_usdt_ohlcv, columns=['ts', 'o', 'h', 'l', 'c', 'v'])
df_ftx = pd.DataFrame(ftx_btc_usdt_ohlcv, columns=['ts', 'o', 'h', 'l', 'c', 'v'])
# 时间戳转datetime格式,单位为毫秒
df_binance['ts'] = pd.to_datetime(df_binance['ts'], unit='ms')
df_ftx['ts'] = pd.to_datetime(df_ftx['ts'], unit='ms')

fig, ax = plt.subplots()
# 方案1:使用对数y轴适配不同量级的交易量
ax.plot(df_binance['ts'], df_binance['v'],label='Binance')
ax.plot(df_ftx['ts'], df_ftx['v'],label='FTX')
ax.set_yscale('log')

# 方案2:双y轴分别绘制两个平台的交易量,可替换上面三行代码
# ax1 = ax.twinx()
# ax.plot(df_binance['ts'], df_binance['v'], label='Binance', color='orange')
# ax1.plot(df_ftx['ts'], df_ftx['v'], label='FTX', color='blue')
# 合并两个轴的图例
# lines, labels = ax.get_legend_handles_labels()
# lines2, labels2 = ax1.get_legend_handles_labels()
# ax.legend(lines + lines2, labels + labels2)

plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

校验方法

如果修改后仍然存在显示问题,可先输出两个数据集的交易量统计值确认数值范围:
print(df_binance['v'].describe(), '\n', df_ftx['v'].describe())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:02