【问题标题】:Ignoring Time gaps larger than x mins Matplotlib in Python忽略 Python 中大于 x 分钟 Matplotlib 的时间间隔
【发布时间】:2017-01-06 23:16:39
【问题描述】:

我在上午 9:30 到下午 4 点之间每 5 分钟获取一次数据。大多数时候,我只是绘制实时盘中数据。但是,有时我想要让我们说 2 天以上的历史视图。唯一的问题是,在下午 4 点和上午 9 点 30 分,我只得到一条连接两个数据点的线。我希望那个差距消失。我的代码和正在发生的事情的示例如下;

fig = plt.figure()
plt.ylabel('Bps')
plt.xlabel('Date/Time')
plt.title(ticker)
ax = fig.add_subplot(111)
myFmt = mdates.DateFormatter('%m/%d %I:%M')
ax.xaxis.set_major_formatter(myFmt)
line, = ax.plot(data['Date_Time'],data['Y'],'b-')

我想将数据保存为时间序列,这样当我滚动它时,我可以看到确切的日期和时间。

【问题讨论】:

  • 可能不是最好的策略,但由于您只关心上午 9 点到下午 4 点,您就不能从您正在绘制的数据中过滤掉下午 4 点到上午 9 点吗?
  • 它是一个时间序列图,因此 matplotlib 会自动填充两者之间。这不是我的数据,它只是一条连接两点的线。
  • 哦,我明白了。 this 可以帮助使线及其对应的轴区域消失,但它可能不是你所追求的。
  • 如果您的数据间隔很近,您可以作弊并简单地使用积分:将'b-'更改为'b.'
  • 'b.'不工作...空间仍然存在

标签: python matplotlib time-series graphing timeserieschart


【解决方案1】:

所以看起来您正在使用 pandas 对象,这很有帮助。假设您已在下午 4 点到上午 9 点之间的任何时间过滤掉 data['Date_Time'],我会确保您的索引已通过 data.reset_index() 重置。您需要使用该整数索引作为 matplotlib 实际用于绘制时间序列的底层索引。然后您可以使用plt.xticks() 手动更改刻度标签本身,如this demo case 所示。放在一起,我希望它看起来像这样:

data = data.reset_index(drop=True) # just to remove that pesky column 

fig, ax = plt.subplots(1,1)
ax.plot(data.index, data['Y'])
plt.ylabel('Bps')
plt.xlabel('Date/Time')
plt.title(ticker)
plt.xticks(data.index, data['Date_Time'])

在发布此内容后,我注意到您问题中的最后一句话。不幸的是,这个“解决方案”不跟踪交互式图形中的“x”变量。也就是说,虽然时间轴标签会根据您的缩放进行调整,但您无法通过光标位置知道时间,因此您必须从图的底部向上看。 :/

【讨论】:

  • 我使用过类似的东西,但我真的希望能够将 x 值跟踪为日期时间。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
相关资源
最近更新 更多