时间轴精确绘图
我在绘制数据时遇到了一些麻烦,我只想显示 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)
当我这样做时,得到了这个图(显示了不必要的精度)
在这里,我得到了像 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)
在这种情况下,我得到了像 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()