在 matplotlib 3.1 中将字符串格式化为日期

Mah*_*i_J 1 python matplotlib

旧版本 python 和 matplotlib 的教程包含如下代码:

def graphRawFX ():
    date,bid,ask = np.loadtxt('GBPUSD1d.txt',
                              unpack=True,
                              delimiter=',',
                              converters={0:mdates.strpdate2num('%Y%m%d%H%M%S')})

    fig = plt.figure(figsize=(10,7))
    ax1 = plt.subplot2grid((40,40),(0,0), rowspan=40,colspan=40)

    ax1.plot(date,bid)
    ax1.plot(date,ask)

    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))

    plt.grid(True)
    plt.show()

graphRawFX()
Run Code Online (Sandbox Code Playgroud)

当我运行代码时出现以下错误:

strpdate2num 类在 Matplotlib 3.1 中已弃用,并将在 3.3 中删除。请改用 time.strptime 或 dateutil.parser.parse 或 datestr2num 。 converters={0:mdates.strpdate2num('%Y%m%d%H%M%S')})

以下是一行数据以获取更多信息:

20130501000000,1.55358,1.55371
Run Code Online (Sandbox Code Playgroud)

那么如何使用 matplotlib 3.1 将该字符串转换为日期?

Ami*_*mit 6

我认为警告要求您做的是使用 time.strptime 函数从字符串转换为时间。您可能想要更改第一行。

import time
date,bid,ask =np.loadtxt('GBPUSD1d.txt',unpack=True,delimiter=',',converters={0:time.strptime(mdates,'%Y%m%d%H%M%S')}) 
Run Code Online (Sandbox Code Playgroud)

这是我根据错误/警告和给出的情况所能看到的。

经过交谈,我意识到 mdates 实际上是一个 matplotlib 模块。因此建议进行更改。请尝试一下。

date,bid,ask = np.loadtxt('GBPUSD1d.txt', unpack=True, delimiter=',', converters={0: lambda x: mdates.datestr2num(x.decode('utf8'))})  
Run Code Online (Sandbox Code Playgroud)

希望这会起作用。