如何将`numpy.datetime64`列表转换为`matplotlib.dates`?

问题描述:

这里是我的简单对象:如何将`numpy.datetime64`列表转换为`matplotlib.dates`?

[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')] 

而是采用了环空列表转换一个接一个,有没有任何捷径?谢谢。

+1

嗯,列表内涵/发电机表达式?但他们仍然一个接一个地处理项目。 – user3159253

+1

https://*.com/questions/34843513/python-matplotlib-dates-date2num-converting-numpy-array-to-matplotlib-datetimes这有帮助吗? –

+1

映射函数? – wwii

我最喜欢的解决方案是这个线程似乎有点隐藏: Converting between datetime, Timestamp and datetime64,这是使用tolist()。由于tolist()返回不同类型,根据阵列类型,需要转换为ms才能获得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()