【问题标题】:Load & Plot %Y-%m-%d %H:%M:%S from a file从文件中加载并绘制 %Y-%m-%d %H:%M:%S
【发布时间】:2017-04-09 04:30:55
【问题描述】:

我正在尝试使用“plot_date”通过加载一个包含两个日期和一个值的文件来制作一个简单的 XY 图,但尚未成功。想法是让第 0 列和第 1 列代表“time1”,第 2 列和第 3 列代表“time2”,第 4 列代表“val”。

数据输入数据如下所示:

2017-04-08 16:54:37 2017-04-08 16:55:08 1
2017-04-08 16:58:28 2017-04-08 16:58:33 1
2017-04-08 17:02:18 2017-04-08 17:02:24 1

代码

import matplotlib.pyplot as plt
from matplotlib.dates import strpdate2num
import numpy as np
import matplotlib.colors
import matplotlib.cm
from matplotlib.dates import date2num, DateFormatter
import datetime as dt

time1,time2,val = np.loadtxt(inputfile, usecols=(0,1,2,3,4), unpack=True, converters = {0,1: strpdate2num("%Y-%m-%d %H:%M:%S")})

这里出现错误:

>>> time1,time2,val = np.loadtxt(inputfile, usecols=(0,1,2,3,4), unpack=True, converters = {0,1: strpdate2num("%Y-%m-%d %H:%M:%S")})
File "<stdin>", line 1
time1,time2,val = np.loadtxt(inputfile, usecols=(0,1,2,3,4), unpack=True, converters = {0,1: strpdate2num("%Y-%m-%d %H:%M:%S")})
                                                                                           ^
SyntaxError: invalid syntax

关于我可能做错了什么有什么想法吗?有什么更正的建议吗?

除其他外,我希望从 time1 中减去 time2 并获得以秒为单位的差异。这可能吗?

最后,我想绘制变量,大致如下:

fig, ax = plt.subplots()
ax.plot_date(time1, val, 'b-', color='b')
ax.plot_date(time2, val, 'b-', color='g')

【问题讨论】:

    标签: python python-2.7 matplotlib time


    【解决方案1】:

    您必须单独转换每一列,然后将其合并:

    import matplotlib.pyplot as plt
    from matplotlib.dates import strpdate2num
    import numpy as np
    import matplotlib.colors
    import matplotlib.cm
    from matplotlib.dates import date2num, DateFormatter
    import datetime as dt
    
    time1,date1,time2,date2,val = np.loadtxt(inputfile, usecols=(0,1,2,3,4),  unpack=True,
     converters = {0: strpdate2num("%Y-%m-%d"), 1: strpdate2num("%H:%M:%S"),
     2: strpdate2num("%Y-%m-%d"), 3: strpdate2num("%H:%M:%S")})
    
    time1 += date1
    time2 += date2
    
    fig, ax = plt.subplots()
    ax.plot_date(time1, val, 'b-', color='b')
    ax.plot_date(time2, val, 'b-', color='g')
    fig.autofmt_xdate()
    plt.show()
    

    【讨论】:

    • 好酷!最后一个问题:如果我执行 time_diff = time2 - time1,如何打印 time_diff 并将其内容显示为秒?
    • Matplotlib 以天为单位存储日期 => dt = t1-t2; seconds = dt * 24 * 60 *60。 24*60*60 = 一天中的秒数。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2016-12-20
    • 2020-05-09
    • 1970-01-01
    • 2021-11-26
    • 2020-03-18
    • 1970-01-01
    相关资源
    最近更新 更多