【问题标题】:Plotting Time Stamp of Specific Format in matplotlib in python在 python 中的 matplotlib 中绘制特定格式的时间戳
【发布时间】:2020-06-03 09:02:08
【问题描述】:

DD.MM_HH:MM:SS.mmmmmm 以这种格式给出了 timestamps,因此如何在 python 中的 ma​​tplotlib 中处理它们

我试图这样做,但不知何故它只接受浮点数组。我怎样才能让它来绘制时间?我必须以任何方式修改格式吗?

我试过这个

dates = matplotlib.dates.date2num(list_of_datetimes) matplotlib.pyplot.plot_date(dates, values)

但出现以下错误

AttributeError: 'numpy.str_' object has no attribute 'toordinal'

请提供我应该遵循的格式来解析这种类型的时间戳?

【问题讨论】:

  • 你能举一个这个时间戳的例子吗?
  • 05.07_15:39:52.855866 这是时间戳的例子
  • 还有一个问题是当标签数量非常多时如何在 y 刻度之间提供间距

标签: python datetime matplotlib


【解决方案1】:

首先将list_of_datetimes中的字符串转换为datetime

from datetime import datetime
import matplotlib

# some example data:
list_of_datetimes = ['05.07_15:39:52.855866', '05.07_15:49:52.855866', '05.07_15:59:52.855866']
values = [1, 2, 3]

# to datetime:
dt = [datetime.strptime(s, '%d.%m_%H:%M:%S.%f') for s in list_of_datetimes]

dates = matplotlib.dates.date2num(dt)
matplotlib.pyplot.plot_date(dates, values)

另一种方法是在 x 轴上绘制自开始以来的时间增量,以避免 matplotlib 中的微秒处理问题:

date = ["05.07_15:39:52.855866","05.07_15:39:52.855869","05.07_15:39:52.855988","05.07_15:39:52.855889"]
values = [1, 2, 3, 4]
dt = [datetime.strptime(s, '%d.%m_%H:%M:%S.%f') for s in date]

# to timedelta:
td = [(d-dt[0]).total_seconds() for d in dt]

matplotlib.pyplot.plot(td, values)

【讨论】:

  • 还有一个问题你能帮我解决这个问题,当标签数量非常多时如何在 y 刻度之间提供间距
  • @Ankur:你看过the docs吗?
  • 我看了,但数据量太大
  • 我看了,但数据量太大,大约有 8000-10000 个值
  • @Ankur:问题似乎是微秒;它们与您相关吗?
猜你喜欢
  • 2023-04-05
  • 2015-12-20
  • 2016-01-14
  • 2017-02-19
  • 2014-11-02
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2010-12-07
相关资源
最近更新 更多