我有一个包含[hour(24), minute, seconds, temperature]
的数组,此数据大约有50,000行。
我想绘制温度与时间的关系。这就对了。听起来很简单我知道。我尝试过使用datetime.timedelta,datetime.strptime等无济于事。我正在使用Ipython笔记本而无处可去。
答案 0 :(得分:0)
问题的根源在于您无法绘制datetime.timedelta
s。您需要将它们设为真datetime.datetime
(或matplotlib的内部日期表示)。
有几种不同的方法可以解决这个问题。如果您已经使用pandas
,则可以将三列作为日期进行解析。但是,正如您未提及pandas
,我认为最好不要依赖它。
因此,另一个要做的就是在时间之外添加日期。哪一天无所谓,所以我们可以使用今天,或1900年1月1日,或其他任何你喜欢的。
例如:
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
def main():
data = generate_data()
hour, minute, sec, temp = data.T
# For timedeltas, we need to convert to fractional seconds in a day
seconds = hour * 3600 + minute * 60 + sec
# Now we'll convert to "full" datetimes
day = dt.datetime(2016, 01, 01)
times = [day + dt.timedelta(0, second) for second in seconds]
fig, ax = plt.subplots()
ax.plot_date(times, temp, color='lightblue', linestyle='-', marker='')
fig.autofmt_xdate()
plt.show()
def generate_data():
"""Generate data similar to yours."""
num = 50000
t = np.linspace(3, 22, num)
minute = (t * 60) % 60
second = (minute * 60) % 60
hour = t.astype(int)
minute = minute.astype(int)
temp = np.random.normal(0, 1, num).cumsum()
data = np.column_stack([hour, minute, second, temp])
return data
main()