用Python绘制时间

时间:2016-02-03 13:24:03

标签: python matplotlib time plot

我有一个包含[hour(24), minute, seconds, temperature]的数组,此数据大约有50,000行。

我想绘制温度与时间的关系。这就对了。听起来很简单我知道。我尝试过使用datetime.timedelta,datetime.strptime等无济于事。我正在使用Ipython笔记本而无处可去。

1 个答案:

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

enter image description here