使用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
相关产品推荐
相关产品推荐

