2015-02-07 72 views
3

我想绘制两个列表中的值。 x轴值是日期。尝试这些东西到目前为止如何在matplotlib中设置日期的xticklabels

year = [20070102,20070806,20091208,20111109,20120816,20140117,20140813] 
yvalues = [-0.5,-0.5,-0.75,-0.75,-0.5,-1.25,-1.25] 

dates = [datetime.datetime.strptime(str(int(date)),'%Y%m%d') for date in year] 

fig, axes = plt.subplots(1, 1, figsize=(16, 9), dpi=100) 

line1, = axes.plot(dates,yvalues, lw=2, marker='*', color='r') 
axes.legend([line1],['VALUES'],loc=1) 
axes.grid() 
axes.set_xlabel('YEAR') 
axes.set_ylabel('VALUES') 

yticks = [-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0] 
axes.set_yticks(yticks) 
axes.set_yticklabels(["$%.2f$" % y for y in yticks]); 

axes.set_xticks(dates) 
#axes.set_xticklabels() 

这个数字看起来不错。但无法正确标记x轴刻度。 我想提前标注x轴的东西,如2007-01-02或2007年1月

感谢

回答

7

您可以使用DateFormater控制日期格式:

import matplotlib.dates as mdates 
xfmt = mdates.DateFormatter('%Y-%m-%d') 
axes.xaxis.set_major_formatter(xfmt) 

import datetime as DT 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

year = [20070102,20070806,20091208,20111109,20120816,20140117,20140813] 
yvalues = [-0.5,-0.5,-0.75,-0.75,-0.5,-1.25,-1.25] 

dates = [DT.datetime.strptime(str(int(date)),'%Y%m%d') for date in year] 

fig, axes = plt.subplots(1, 1, figsize=(16, 9), dpi=100) 

line1, = axes.plot(dates,yvalues, lw=2, marker='*', color='r') 
axes.legend([line1],['VALUES'],loc=1) 
axes.grid() 
axes.set_xlabel('YEAR') 
axes.set_ylabel('VALUES') 

yticks = [-2.0,-1.75,-1.5,-1.25,-1.0,-0.75,-0.5,-0.25,0.0] 
axes.set_yticks(yticks) 
axes.set_yticklabels(["$%.2f$" % y for y in yticks]); 

xfmt = mdates.DateFormatter('%Y-%m-%d') 
axes.xaxis.set_major_formatter(xfmt) 
axes.set_xticks(dates) 
plt.xticks(rotation=25) 
plt.show() 

产生

enter image description here