如何转换日期时间格式的排列以在python中绘制?

时间:2014-02-01 13:12:39

标签: python datetime python-2.7 time matplotlib

我有一个像这样的列表

 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)

由于

1 个答案:

答案 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()

enter image description here


如果您安装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()