如何将`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')]
而是采用了环空列表转换一个接一个,有没有任何捷径?谢谢。
答
我最喜欢的解决方案是这个线程似乎有点隐藏: 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()
嗯,列表内涵/发电机表达式?但他们仍然一个接一个地处理项目。 – user3159253
https://stackoverflow.com/questions/34843513/python-matplotlib-dates-date2num-converting-numpy-array-to-matplotlib-datetimes这有帮助吗? –
映射函数? – wwii