在时间轴上精确绘图

时间:2014-04-16 21:01:59

标签: python datetime matplotlib plot

我在绘制数据时遇到问题,我只想要绘制HH:MM:SS,但绘图显示HH:MM:SS.sssss或HH:MM:SS。%f。下面我将详细说明我做了什么(matplotlib,numpy已经导入)

方法I

将文件加载到情节

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

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

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)

方法II

加载数据的方式相同,在这种情况下只有我花时间的数据并且在时间字符串中被隐藏

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 个答案:

答案 0 :(得分:3)

您应该使用plot_date使用matplotlib绘制datetime个对象。

您可以使用matplotlib.dates.date2numdatetime个对象转换为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()

Example plot