2015-02-07 71 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