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

将datetime64[ns]类型的Open time设为DataFrame索引后,Matplotlib绘图中买卖信号箭头消失的解决方法

解决设置Datetime索引后买卖信号箭头消失的问题

我明白你遇到的困扰了——把Open time设为DataFrame的索引后,买卖信号的箭头就消失了,但你又需要x轴显示清晰的时间刻度。其实问题出在索引类型变化后,绘图时的坐标匹配逻辑上,咱们调整一下代码就能完美解决:

修改后的完整代码

import pandas as pd
import matplotlib.pyplot as plt

df4 = pd.read_csv('data/df_4h.csv', parse_dates=['Open time'])
df4.set_index('Open time', inplace=True) # 现在可以正常启用这行代码了

fig, ax2 = plt.subplots(figsize=(15, 10))
df4['Close'].plot(ax=ax2, color='k', lw=1, label='Close Price')
df4['4_EMA'].plot(ax=ax2, color='b', lw=1, label='4_EMA')
df4['20_EMA'].plot(ax=ax2, color='g', lw=1, label='20_EMA')

# 绘制买入信号:使用datetime索引作为x坐标
buy_signals = df4[df4['Position'] == 1]
ax2.plot(buy_signals.index, buy_signals['4_EMA'], '^', markersize=15, color='g', alpha=0.7, label='buy')

# 绘制卖出信号:同样使用datetime索引
sell_signals = df4[df4['Position'] == -1]
ax2.plot(sell_signals.index, sell_signals['4_EMA'], 'v', markersize=15, color='r', alpha=0.7, label='sell')

# 让时间刻度旋转45度,避免重叠,提升可读性
plt.xticks(rotation=45)
plt.legend()
plt.show()

为什么这样修改有效?

  • 当你把Open time设为索引后,DataFrame的索引变成了datetime64类型,主图的x轴也随之切换为时间戳,不再是默认的整数位置。
  • 原来的代码在未设置索引时,依赖默认整数索引定位箭头位置,切换为datetime索引后这个逻辑就失效了,导致箭头消失。现在我们直接用筛选后行的datetime索引作为x坐标,和主图的x轴类型完全匹配,箭头就能精准显示在对应的时间点上。
  • 新增的plt.xticks(rotation=45)可以让时间刻度旋转,避免因文本过长导致的重叠问题,让x轴刻度更易读。

内容的提问来源于stack exchange,提问作者Manuel Simões

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:12:48