我有一个像这样的列表
HEIGHT DATE TIME ANGL FC COL ROW
3.76 20120127 18 27 52 291.9 1 399.0 311.0
5.46 20120127 18 38 43 293.5 1 462.0 343.0
6.31 20120127 18 43 18 292.8 1 311.0 288.0
8.49 20120127 18 54 05 290.7 1 330.0 293.0
11.08 20120127 19 06 05 293.1 1 350.0 305.0
13.47 20120127 19 18 05 296.1 1 367.0 319.0
16.09 20120127 19 30 06 297.8 1 386.0 333.0
18.47 20120127 19 42 05 299.0 1 403.0 346.0
21.73 20120127 19 54 06 300.4 1 426.0 364.0
23.40 20120127 20 06 05 301.8 1 436.0 376.0
28.33 20120127 20 18 05 302.7 1 471.0 402.0
我想在DATE和TIME行中使用DATE和TIME行安排一段时间,然后将其与任何其他行进行对比
我尝试使用日期时间,但我没有得到任何东西
import datetime as dt
data=loadtxt('CME27.txt', skiprows=1)
col=data[:,7]
row=data[:,8]
h=data[:,2]
m=data[:,3]
s=data[:,4]
t=dt.time(h,m,s)
我收到了错误!
我想绘制
plot(t,col)
由于
答案 0 :(得分:2)
我认为您不能使用matplotlib直接绘制datetime.time
个对象。但是,您可以绘制datetime.datetime
个对象。给定NumPy数组data
,您将不得不使用Python循环将浮点数解析为datetime.datetime
个对象。
你可以这样做:
import numpy as np
import datetime as DT
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data = np.loadtxt('CME27.txt', skiprows=1)
col, row = data[:, 7:9].T
dates = []
for date, h, m, s in data[:,1:5]:
dates.append(
DT.datetime.strptime('{date:.0f} {h:.0f} {m:.0f} {s:.0f}'.format(**locals()),
'%Y%m%d %H %M %S'))
fig, ax = plt.subplots()
ax.plot(dates, col)
plt.xticks(rotation=25)
xfmt = mdates.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.show()
如果您安装pandas,则上述内容可以简化为
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_table('CME27.txt', sep='\s+', skiprows=1, header=None,
parse_dates={'date':[1,2,3,4]})
df.columns = 'date height angle fc col row'.split()
df.plot('date', 'col')
plt.show()