用日期时间和matplotlib绘图

3
因此,我正在使用这个网站上的函数来制作一些netCDF4数据的棒图。 以下是我的代码摘录。 我从这里获取了数据。 stick_plot(time,u,v)函数与我链接的网站上完全相同,这就是为什么我没有在下面显示该函数的副本。
当我运行代码时,我收到以下错误。有什么办法可以避免这种情况吗?

AttributeError: 'numpy.float64' object has no attribute 'toordinal'

来自netCDF4文件的时间描述:
<type 'netCDF4._netCDF4.Variable'>
float64 time(time)
    long_name: time
    standard_name: time
    units: days since 1900-01-01 00:00:00Z
    axis: T
    ancillary_variables: time_quality_flag
    data_min: 2447443.375
    data_max: 2448005.16667
unlimited dimensions: 
current shape = (13484,)
filling off

这是我的代码摘录:

导入:

import matplotlib.pyplot as plot
import numpy as np
from netCDF4 import Dataset
import os
from matplotlib.dates import date2num
from datetime import datetime

尝试生成图形:
path = '/Users/Kyle/Documents/Summer_Research/east_coast_currents/'
currents = [x for x in os.listdir('%s' %(path)) if '.DS' not in x]

for datum in currents:
    working_data = Dataset('%s' %(path+datum), 'r', format = 'NETCDF4')
    u = working_data.variables['u'][:][:100]
    v = working_data.variables['v'][:][:100]
    time = working_data.variables['time'][:][:100]
    q = stick_plot(time,u,v)
    ref = 1
    qk = plot.quiverkey(q, 0.1, 0.85, ref,
                      "%s N m$^{-2}$" % ref,
                      labelpos='N', coordinates='axes')

    _ = plot.xticks(rotation=70)    

2
听起来你正在对一个浮点数调用 date2numdate2num 需要 datetime 对象。但是你很幸运,你的 NetCDF 文件中的时间字段似乎已经完全符合 date2num 要转换的格式。在 stick_plot 函数中将 date2num(time) 替换为 time,然后你就可以继续了。 - Joe Kington
哦,谢谢!你是正确的!@JoeKington - K. Shores
现在,我该如何将这个问题标记为已解决? - K. Shores
如果@JoeKington想要添加一个答案,你可以接受并点赞以表示问题已解决。如果不行的话,你可以自己回答并接受它(将解决方案归功于Joe的评论 :))。我认为这样做是值得的,因为这些信息可能对其他人在未来也很有用。 - J Richard Snape
是的,日期时间不同 - 更多细节请参见 >>> https://dev59.com/1I_ea4cB1Zd3GeqPNmIX#32728754 - user3666197
1个回答

2

Joe Kington回答了我的问题。netCDF4文件将时间作为datetime对象读入。我所要做的就是用time替换date2num(time),这样一切都解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接