【问题标题】:How to convert list of `numpy.datetime64` to `matplotlib.dates`?如何将“numpy.datetime64”列表转换为“matplotlib.dates”?
【发布时间】:2017-09-23 05:06:06
【问题描述】:

这是我的简单对象:

[numpy.datetime64('2017-01-03T00:00:00.000000000'),
 numpy.datetime64('2017-01-04T00:00:00.000000000'),
 numpy.datetime64('2017-01-05T00:00:00.000000000'),
 numpy.datetime64('2017-01-06T00:00:00.000000000'),
 numpy.datetime64('2017-01-09T00:00:00.000000000'),
 numpy.datetime64('2017-01-10T00:00:00.000000000'),
 numpy.datetime64('2017-01-11T00:00:00.000000000'),
 numpy.datetime64('2017-01-12T00:00:00.000000000'),
 numpy.datetime64('2017-01-13T00:00:00.000000000'),
 numpy.datetime64('2017-01-16T00:00:00.000000000'),
 numpy.datetime64('2017-01-17T00:00:00.000000000'),
 numpy.datetime64('2017-01-18T00:00:00.000000000'),
 numpy.datetime64('2017-01-19T00:00:00.000000000'),
 numpy.datetime64('2017-01-20T00:00:00.000000000'),
 numpy.datetime64('2017-01-23T00:00:00.000000000'),
 numpy.datetime64('2017-01-24T00:00:00.000000000'),
 numpy.datetime64('2017-01-25T00:00:00.000000000'),
 numpy.datetime64('2017-01-26T00:00:00.000000000'),
 numpy.datetime64('2017-01-27T00:00:00.000000000'),
 numpy.datetime64('2017-02-01T00:00:00.000000000')]

不是使用循环一个空列表一个一个地转换,有什么快捷方式吗?谢谢。

【问题讨论】:

标签: python numpy matplotlib


【解决方案1】:

我最喜欢的解决方案是在这个线程中似乎有点隐藏: Converting between datetime, Timestamp and datetime64,即使用tolist()。因为tolist()返回的类型不同,根据数组类型,需要转换成ms才能得到datetime对象。 datetime 对象可以直接用 matplotlib 绘制,也可以在它们上应用matplotlib.dates.date2num()

所以如果a是上面的numpy数组,

x = a.astype("M8[ms]").tolist()

生成日期时间对象列表。

完整示例:

import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates

a = np.array([np.datetime64('2017-01-03T00:00:00.000000000'),
     np.datetime64('2017-01-04T00:00:00.000000000'),
     np.datetime64('2017-01-05T00:00:00.000000000'),
     np.datetime64('2017-01-06T00:00:00.000000000'),
     np.datetime64('2017-01-09T00:00:00.000000000'),
     np.datetime64('2017-01-10T00:00:00.000000000'),
     np.datetime64('2017-01-11T00:00:00.000000000'),
     np.datetime64('2017-01-12T00:00:00.000000000'),
     np.datetime64('2017-01-13T00:00:00.000000000'),
     np.datetime64('2017-01-16T00:00:00.000000000'),
     np.datetime64('2017-01-17T00:00:00.000000000'),
     np.datetime64('2017-01-18T00:00:00.000000000'),
     np.datetime64('2017-01-19T00:00:00.000000000'),
     np.datetime64('2017-01-20T00:00:00.000000000'),
     np.datetime64('2017-01-23T00:00:00.000000000'),
     np.datetime64('2017-01-24T00:00:00.000000000'),
     np.datetime64('2017-01-25T00:00:00.000000000'),
     np.datetime64('2017-01-26T00:00:00.000000000'),
     np.datetime64('2017-01-27T00:00:00.000000000'),
     np.datetime64('2017-02-01T00:00:00.000000000')])

x = a.astype("M8[ms]").tolist()
y = np.random.rand(len(a))

plt.plot(x, y, color="limegreen")

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2013-01-19
    • 2013-10-30
    • 2017-01-21
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多