2017-06-06 106 views
0

我从来没有使用Python,我必须做这个作为我的第一个任务。我花了3个小时才得到这一点,我真的需要一些帮助。我有一个数组的一维数组。我必须制作时间序列图。如何在使用matplotlib时在X轴上显示年?

import datetime 
import matplotlib.pyplot as plt 
import numpy as np 

data = np.load("abnormal.npy") 

x = np.array(range(1,len(data)+1)) 
y = np.load("abnormal.npy") 

plt.plot(x,y) 
plt.show()  

plot

正如你所看到的X轴是我现在数组的数组范围。 如何更改此日期时间2002-2012?

+1

你有地方存放这些年?现在,你的x只是一个数字从1到4000的数组,这就是绘制的东西。如果你只是想改变剧情中的勾号标签,你也可以这样做,但你需要知道什么时候。更多信息会很有用。 –

+0

X是自2002-01-01以来的日子,所以我需要它直到2012-12-31,但是X和Y数组长度应该匹配,不是吗? – rmths01

+0

是的,他们应该匹配的长度。 –

回答

0

你只是喜欢这样做,

import pandas as pd 

y_len = 100 
x = pd.date_range("20020101", freq='D', periods=y_len).strftime("%Y-%m-%d").tolist() 

你只需要得到Y轴的lenght并指向y_len,对于你的问题

y_len = len(data) 

示例代码输出,

['2002-01-01', '2002-01-02', '2002-01-03', '2002-01-04', '2002-01-05', '2002-01-06', '2002-01-07', '2002-01-08', '2002-01-09', '2002-01-10', '2002-01-11', '2002-01-12', '2002-01-13', '2002-01-14', '2002-01-15', '2002-01-16', '2002-01-17', '2002-01-18', '2002-01-19', '2002-01-20', '2002-01-21', '2002-01-22', '2002-01-23', '2002-01-24', '2002-01-25', '2002-01-26', '2002-01-27', '2002-01-28', '2002-01-29', '2002-01-30', '2002-01-31', '2002-02-01', '2002-02-02', '2002-02-03', '2002-02-04', '2002-02-05', '2002-02-06', '2002-02-07', '2002-02-08', '2002-02-09', '2002-02-10', '2002-02-11', '2002-02-12', '2002-02-13', '2002-02-14', '2002-02-15', '2002-02-16', '2002-02-17', '2002-02-18', '2002-02-19', '2002-02-20', '2002-02-21', '2002-02-22', '2002-02-23', '2002-02-24', '2002-02-25', '2002-02-26', '2002-02-27', '2002-02-28', '2002-03-01', '2002-03-02', '2002-03-03', '2002-03-04', '2002-03-05', '2002-03-06', '2002-03-07', '2002-03-08', '2002-03-09', '2002-03-10', '2002-03-11', '2002-03-12', '2002-03-13', '2002-03-14', '2002-03-15', '2002-03-16', '2002-03-17', '2002-03-18', '2002-03-19', '2002-03-20', '2002-03-21', '2002-03-22', '2002-03-23', '2002-03-24', '2002-03-25', '2002-03-26', '2002-03-27', '2002-03-28', '2002-03-29', '2002-03-30', '2002-03-31', '2002-04-01', '2002-04-02', '2002-04-03', '2002-04-04', '2002-04-05', '2002-04-06', '2002-04-07', '2002-04-08', '2002-04-09', '2002-04-10'] 
+1

我想在X这样的标签上,2002-2012 但是我不能这样做,就像在这个答案中一样,因为那么X和Y数组长度不匹配。 我想我需要一些特殊的日期时间函数,但是我不知道该怎么做。 – rmths01

+0

@CynthiaGS当我第一次回答这个问题时,描述如此集中,当所有者更新问题描述时,我再次更新了答案,请检查。 – saul

1

您将需要一个与数组数组完全一致的日期数组。如果例如你知道,在每天有一个数据点,你可以创建这个数组作为

start = datetime.date(2002, 01, 01) 
dates = [start + datetime.timedelta(n) for n in range(len(y))] 

完整的示例:

import datetime 
import matplotlib.pyplot as plt 
import numpy as np; np.random.seed(1) 

y = np.cumsum(np.random.normal(size=4000)) 

start = datetime.date(2002, 01, 01) 
dates = [start + datetime.timedelta(n) for n in range(len(y))] 

plt.plot(dates,y) 
plt.show() 

enter image description here