2016-09-29 177 views
0

我想减少x tick标记的频率。 x值是日期:使用python设置xticks标签频率

date=['20120101','20120101','20120101',...'20121231'] 

我有24个时间步骤,每年的每一天。我想每隔24个时间步骤(即每天)标记xticks。

这里是我使用的代码:

date=[] 
val=[] 
for lig in file(liste.txt): 
    ligne=lig.split('') 
    date.append(ligne[0]) 
    val.append(ligne[1]) 

plt.plot(date,val) 
plt.setp(plt.gca().xaxis.get_majorticklabels(),rotation=90) 
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%y%m%d')) 
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=4)) 
plt.show() 

这里是我的情节,没有xticks标签!

enter image description here

回答

1

由于没有完整和工作的例子,我们不得不猜测:是您的date正确识别为DateTime对象?否则,日期格式中的set_major_locator将不会导致x-ticks。

您可以使用类似date = datetime.datetime.strptime(date, '%Y%m%d')的东西来实现此目的。

+1

我想补充一点,文档明确指出格式字符串必须符合['strftime'](http://strftime.org/) –

+0

我已经完成了我的示例。当我添加日期= datetime.datetime.strftime(日期,'%y%m%d'),它返回描述符'strftime'需要'datetime.date'对象,但收到'列表' – user5276228

+1

首先,这不是我称之为工作示例。有两个拼写错误:'plt.gca()。xaxix。(...)'和'dateFormatter('%y%m%d')',都会导致一个'Attribute error'。其次,看起来你必须分开处理每个元素,例如创建第二个空列表'date2 = []',然后用'for datem'填入它:date2.append(datetime.datetime.strptime(itm,'%Y%m%d')) '。你必须绘制'date2'而不是'date',然后,这是一个不幸的变量名称。 (我敢肯定,还有更多pythonic的写法!我没有使用lambda函数的经验。) – nostradamus