我在绘制数据时遇到问题,我只想要绘制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)
当我这样做时,我得到了这个情节(具有无精确性)
这里我有时间像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)
在这种情况下,我有时间像18:15 00.%f
那么,我怎么能修复它?
答案 0 :(得分: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()