【问题标题】:Time plotting in PythonPython中的时间绘图
【发布时间】:2016-02-03 13:24:02
【问题描述】:

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

我想绘制温度与时间的关系图。这就对了。我知道听起来很容易。我试过玩 datetime.timedelta、datetime.strptime 等但无济于事。我正在使用 Ipython 笔记本,但一无所获。

【问题讨论】:

  • 你已经有什么代码了?你如何加载数据?是numpy数组还是pandas数组?
  • f = open('2GBDATALOG4.txt') DATALOG4=np.zeros(0) DATALOG4=f.read().split() for i in range(0,len(DATALOG4)): DATALOG4[i]=DATALOG4[i].split(',') UAV=np.array(DATALOG4).astype(float) 抱歉上面的混乱,就像我说这是我第一次使用这个论坛。我已经注释掉了其他一些代码,但它们不起作用,所以没有意义表明......希望有一个前进的方向,而不是更正不起作用的代码。我附近没有任何东西

标签: python matplotlib time plot


【解决方案1】:

问题的根源在于您无法绘制datetime.timedeltas。您需要将它们设为真正的 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2023-04-06
    • 2015-05-26
    • 2011-03-03
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多