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

plt.plot绘制ES期货成交量时X轴与数据范围不符问题咨询

解决Matplotlib绘制ES期货成交量时X轴刻度包含无效区间的问题

问题描述

你用于分析ES(标普期货)成交量的代码片段:

esVolume = (es['Volume']).loc['2023-03-15 09:00:00-04:00':'2023-03-15 10:29:00-04:00']
plt.plot(Time.minute(900,1030), esVolume)

实际数据的时间范围对应分钟数是[900,959] ∪ [1000,1030],但绘制出的图表X轴却包含了960-999的刻度,这是为什么?

原因分析

核心问题出在X轴数据的类型和Matplotlib的刻度生成逻辑:

  • Time.minute(900,1030)生成的是连续的数值序列(从900到1030的整数),哪怕你的esVolume数据在960-999区间没有对应值,Matplotlib依然会把这个数值范围当作连续区间处理,自动生成覆盖整个范围的刻度。
  • 它不会主动识别你数据中的“断档”,只会根据输入的X轴数值范围来划分刻度区间。

解决办法

方法1:直接使用时间序列作为X轴(推荐)

用esVolume自带的时间索引作为X轴输入,Matplotlib会自动识别时间格式,只显示有数据的时间刻度:

plt.plot(esVolume.index, esVolume)
# 可选:添加时间格式化让刻度更清晰
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.gcf().autofmt_xdate()

方法2:手动指定X轴刻度(保留分钟数显示)

如果坚持要用分钟数作为X轴,手动生成需要的刻度列表,过滤掉960-999的无效区间:

x_values = Time.minute(900,1030)
plt.plot(x_values, esVolume)
# 生成有效刻度:900-959 加上 1000-1030
valid_ticks = list(range(900, 1000)) + list(range(1000, 1031))
plt.xticks(ticks=valid_ticks, rotation=45)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:52:38