gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:38:29 29 4
gpt4 key购买 nike

我有一个 .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 并定义名称和数据类型时,它会返回一个元组列表,即,

[('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()

给出了下面的图: enter image description here

关于python - 在 matplotlib 中绘制时间与日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281880/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com