【问题标题】:Timestamp axis with pylab带有pylab的时间戳轴
【发布时间】:2015-11-20 16:03:24
【问题描述】:

我在定义要绘制的日期范围时遇到了一些麻烦。我有一个包含数据的大文件;每行的第一个条目是时间戳(每 15 分钟一次),格式如下:

2014-06-05 17:30:00

为了能够在我的图中选择日期范围,我将字符串日期值转换为日期和时间值:

import pylab # Plotting functions
import matplotlib.dates # get date plotting functions
import datetime # get date functions

(skipping the list of column headers and the dictionary variables)

meteodata = data file with one col. TIMESTAMP

#Create arrays filled with zeros and proper length
YY = scipy.zeros(len(meteodata['TIMESTAMP']))
MM = scipy.zeros(len(meteodata['TIMESTAMP']))
DD = scipy.zeros(len(meteodata['TIMESTAMP']))
HH = scipy.zeros(len(meteodata['TIMESTAMP']))
mm = scipy.zeros(len(meteodata['TIMESTAMP']))
ss = scipy.zeros(len(meteodata['TIMESTAMP']))
numdatetime = scipy.zeros(len(meteodata['TIMESTAMP']))

# Create emty array
dateval = []

#Convert string date values to date and time values
for i in range (0,len(meteodata['TIMESTAMP']),1):
    datestring = meteodata['TIMESTAMP'][i]
    YY[i] = int(datestring[1:5])
    MM[i] = int(datestring[6:8])
    DD[i] = int(datestring[9:11])
    HH[i] = int(datestring[12:14])
    mm[i] = int(datestring[15:17])
    ss[i] = int(datestring[18:20])
    #create a datetime object holding dates and times
    dt = datetime.datetime(int(YY[i]),int(MM[i]),int(DD[i]),int(HH[i]),
                                int(mm[i]),int(ss[i]))
    dateval.append(dt)
    #create a numerical date value
    numdatetime[i]=matplotlib.dates.date2num(dt)

# get doy of year numbers
doy = scipy.zeros(len(meteodata['TIMESTAMP']))
for i in range (0,len(meteodata['TIMESTAMP']),1):
    doy[i] = int(datetime.date.fromordinal(int(numdatetime[i])).strftime("%j"))

所以我已经完成了所有日期和时间的工作,但是如何访问我的情节中的某些天、月或年?例如,我想绘制 XXX 和 YYY 与 a) 2015 年 7 月(按月份和年份)b)1.7.2015 到 20.7.2015(按预定义的日期范围)和 c)每小时(尽管有新的数据输入)每 15 分钟带有时间戳)- 我必须在哪里以及如何修改我的代码?

pylab.ylabel(r'${\rm XXX and YYY}$', fontsize=8)
pylab.xlabel(r'${\rm Date}$', fontsize=12)
# Plot XXX and YYY versus time
pylab.plot_date(howtimegoeshere, XXX, '+b', label= 'XXX', linewidth=0.5, markersize=4)
pylab.plot_date(howtimegoeshere, YYY, '-r', label= 'YYY', linewidth=0.5, markersize=2)

如何更改“howtimegoeshere”?作为一个 python 新手,这些时间命令对我来说仍然很困惑:-/ 感谢您的各种建议!

问题已解决see here

【问题讨论】:

    标签: python python-2.7 datetime matplotlib plot


    【解决方案1】:

    首先,借助datetime 模块的strptime函数,有一种更简单的方法可以将字符串转换为datetime 对象:

    dt = datetime.datetime.strptime(datestring, '%d-%b-%Y %H:%M:%S')
    

    查看https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior了解更多格式。

    为了设置范围,您只需使用datetime 对象调用xlim() 方法,例如:

    pylab.xlim(datetime.datetime(2015, 07, 01), datetime.datetime(2015, 07, 20))
    

    另外我建议给datetimeimport 取一个别名,例如:

    import datetime as dt
    

    那么上一行就变成了

    pylab.xlim(dt.datetime(2015, 07, 01), dt.datetime(2015, 07, 20))
    

    最后,不建议再使用pylab命名空间了,(见http://matplotlib.org/faq/usage_faq.html#matplotlib-pyplot-and-pylab-how-are-they-related

    【讨论】:

    • 谢谢! strptime 函数节省了我半公里的代码。但是,我现在为我的轴获得了正确的标题,但数据本身不会显示在图中。我如何结合这些? # Plot XXX and YYY versus corresponding datepylab.plot(XXX, '+b', label= r'$XXX$', linewidth=0.5, markersize=4)pylab.plot(YYY, '-r', label= r'$YYY$', linewidth=0.5, markersize=2)pylab.xlim(dt.datetime(2014, 06, 10), dt.datetime(2014, 06, 20))
    • 感谢@Sicotfre - 您的回答有助于解决我的问题 (stackoverflow.com/questions/32248706/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多