我有一个像这样的数组:
dt64 = array(['1970-01-01', '1970-01-02', '1970-02-03', '1970-02-04',
'1970-03-05', '1970-03-06', '1970-04-07', '1970-04-08',
'1970-05-09', '1970-05-10', '1970-06-11', '1970-06-12',
'1970-07-13', '1970-07-14'], dtype='datetime64[D]')
现在,我想绘制一些与数组的单个元素关联的数据。在该图中,我想使用matplotlib进行绘制,我需要画一条可以改变颜色几个月的线。
我想用橙色绘制三月至八月的月份,用蓝色绘制其他月份。
我认为我必须做两行plt.plot
,其中一行用于橙色行,另一行用于蓝色行。
我现在的问题是,我很难以返回月以将它们与所需月份进行比较的方式对这些datetime64对象进行切片。
到目前为止,我有:
import numpy as np
from matplotlib import pyplot as plt
def md_plot(dt64=np.array, md=np.array):
"""Erzeugt Plot der Marsdistanz (y-Achse) zur Zeit (x-Achse)."""
plt.style.use('seaborn-whitegrid')
y, m, d = dt64.astype(int) // np.c_[[10000, 100, 1]] % np.c_[[10000, 100, 100]]
dt64 = y.astype('U4').astype('M8') + (m-1).astype('m8[M]') + (d-1).astype('m8[D]')
plt.plot(dt64, md, color='orange', label='Halbjahr der steigenden Temperaturen')
plt.plot(dt64, md, color='blue', label='Halbjahr der fallenden Temperaturen')
plt.xlabel("Zeit in Jahren\n")
plt.xticks(rotation = 45)
plt.ylabel("Marsdistanz in AE\n(1 AE = 149.597.870,7 km)")
plt.figure('global betrachtet...') # diesen Block ggf. auskommentieren
#plt.style.use('seaborn-whitegrid')
md_plot(master_array[:,0], master_array[:,1]) # Graph
plt.show()
plt.close()
这个想法似乎可行,但不适用于整个阵列:
In [172]: dt64[0].astype(datetime.datetime).month
Out[172]: 1
我真的想避免使用Pandas,因为当有一种方法可以通过使用已经使用的模块来完成任务时,我不想膨胀我的脚本。我还读到它会降低速度here。
答案 0 :(得分:1)
在中间步骤中转换为python datetime
:
from datetime import datetime
import numpy as np
datestrings = np.array(["18930201", "19840404"])
months = np.array([datetime.strptime(d, "%Y%m%d").month for d in datestrings])
print(months)
# out: [2 4]
答案 1 :(得分:0)
如果我对您的理解正确,那么可以这样做:
[np.datetime64(i,'M') for i in dt64]
答案 2 :(得分:0)
我的numpy版本可能已过时,但是当我运行np.datetime64(dt64[0])
时,我得到了numpy.datetime64('1970-01')
要获取月份(如果您正在寻找的话),请尝试:
np.datetime_as_string(dt64[0]).split('-')[1]
答案 3 :(得分:0)