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

