时间轴精确绘图

2 投票
1 回答
3546 浏览
提问于 2025-04-18 03:02

我在绘制数据时遇到了一些麻烦,我只想显示 HH:MM:SS 的格式,但图表上却显示了 HH:MM:SS.sssss 或 HH:MM:SS.%f。下面我会详细说明我做了什么(matplotlib 和 numpy 已经导入了)。

方法一

加载文件以进行绘图

import datetime as dt
data=genfromtxt('27JAN12.K7O', delimiter=2*[4]+5*[2]+8*[7])
f245   = data[:, 7]

生成时间数组(每秒一个数据)

base = dt.datetime(2014,1,27,11,07,59)
time  = array([base + dt.timedelta(seconds=i) for i in range(len(data))])
plot(time,f245)

当我这样做时,得到了这个图(显示了不必要的精度)

enter image description here

在这里,我得到了像 18:15:00.000000 这样的时间(我只想要 18:15:00)。

方法二

以相同的方式加载数据,这次我只提取了数据的时间并将其转换为时间字符串。

t      =  data[:,1] #in decimals e.g. 18,5 represents 18:30:00
tstr   =  map(str, [dt.timedelta(seconds=x) for x in t])
time = []
for i in tstr:
    try:
        time.append(dt.datetime.strptime(i, "%H:%M:%S"))
    except ValueError:
        time.append(dt.datetime.strptime(i, "%H:%M:%S.%f"))
plot(time,f245)

enter image description here

在这种情况下,我得到了像 18:15:00.%f 这样的时间。

那么,我该如何解决这个问题呢?

1 个回答

3

你应该使用 plot_date 这个函数来用 matplotlib 绘制 datetime 对象。

你可以用 matplotlib.dates.date2num 来把 datetime 对象转换成 matplotlib 能识别的格式。

此外,你还可以使用 DateFormatter 对象来设置 x 轴刻度标签的格式。

我现在提供了一个使用生成数据的小例子,希望这能帮你理解所有内容。

import numpy as numpy

import matplotlib.pyplot as plt
from matplotlib.dates import date2num, DateFormatter

import datetime as dt

base = dt.datetime(2014, 1, 27, 11, 7, 59)

x = [base + dt.timedelta(seconds=i) for i in range(10)]
y = [i**2 for i in range(10)]

x = date2num(x) # Convert datetime objects to the correct format for matplotlib.

fig, ax = plt.subplots()

ax.plot_date(x, y) # Use plot_date rather than plot

# Set the xaxis major formatter as a DateFormatter object
# The string argument shows what format you want (HH:MM:SS)
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))

# This simply makes them look pretty by setting them diagonal.
fig.autofmt_xdate()

plt.show()

示例图

撰写回答