编程语言
首页 > 编程语言> > python – 在matplotlib中绘制时间与日期

python – 在matplotlib中绘制时间与日期

作者:互联网

我有一个.csv文件,其中只有两列,日期和时间:

    04-02-15,11:15
    04-03-15,09:35
    04-04-15,09:10
    04-05-15,18:05
    04-06-15,10:30
    04-07-15,09:20

我需要使用matplotlib绘制这些数据(最好是在区域图中,还没有那么远).我需要y轴是时间,而x轴是日期.我无法解决时间/日期的一些使用问题,并希望有人可以查看我的代码并提供一些指导:

import numpy as np
from pylab import *
import matplotlib.pyplot as plt
import datetime as DT

data= np.loadtxt('daily_count.csv', delimiter=',',
         dtype={'names': ('date', 'time'),'formats': ('S10', 'S10')} )

x = [DT.datetime.strptime(key,"%m-%d-%y") for (key, value) in data ]
y = [DT.datetime.strptime(key,"%h:%m") for (key, value) in data]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid()


fig.autofmt_xdate()
fig.autofmt_ytime()
plt.plot(x,y)
plt.xlabel('Date')
plt.ylabel('Time')
plt.title('Peak Time')
plt.show()

每次我尝试运行它,我都会收到此错误:

ValueError: time data '04-02-15' does not match format '%h:%m'

我也怀疑y轴的嘀嗒声,到目前为止似乎还没有确定.我对这段代码的其余部分也非常乐观 – 感谢提前,互联网英雄们!

解决方法:

所以回溯告诉你问题.它试图将您的日期解析为您的时间,这是您在以下行中解析数据的方式的结果:

data= np.loadtxt('daily_count.csv', delimiter=',',
         dtype={'names': ('date', 'time'),'formats': ('S10', 'S10')} )

x = [DT.datetime.strptime(key,"%m-%d-%y") for (key, value) in data ]
y = [DT.datetime.strptime(key,"%h:%m") for (key, value) in data]

有多种解决方案,但问题的根源;是当你使用loadtxt并定义名称和dtypes时,它会返回一个元组列表,即

[('04-02-15', '11:15') ('04-03-15', '09:35') ('04-04-15', '09:10')
('04-05-15', '18:05') ('04-06-15', '10:30') ('04-07-15', '09:20')]

因此,当您循环使用它时,您实际上不断访问日期:

>>> print [key for (key, value) in data]
>>> ['04-02-15', '04-03-15', '04-04-15', '04-05-15', '04-06-15', '04-07-15']

所以你试图将’04 -02-15’变成格式’%h:%m’,这当然不会起作用.

为了达到目的,您可以使用zip函数取消对解析数据的干扰.例如,

print map(list, zip(*data))
['04-02-15', '04-03-15', '04-04-15', '04-05-15', '04-06-15', '04-07-15']
['11:15', '09:35', '09:10', '18:05', '10:30', '09:20']

此外,您需要检查所传递日期的格式,例如“%h:%m”将不起作用,因为%h不存在,%m表示月份.您可以在文档上找到一个很好的摘要,或者在这里:http://strftime.org/.

或者说到这一点:

import numpy as np
from pylab import *
import matplotlib.pyplot as plt
import datetime as DT

data= np.loadtxt('daily_count.csv', delimiter=',',
         dtype={'names': ('date', 'time'),'formats': ('S10', 'S10')} )

dates, times = map(list, zip(*data))
print dates, times

x = [DT.datetime.strptime(date,"%m-%d-%y") for date in dates]
y = [DT.datetime.strptime(time,"%H:%M") for time in times]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid()

plt.plot(x,y)
plt.xlabel('Date')
plt.ylabel('Time')
plt.title('Peak Time')
plt.show()

给出了以下情节:

标签:python,matplotlib,graph-visualization
来源: https://codeday.me/bug/20191007/1864683.html