2010-02-07 5 views
1

J'ai actuellement la date étiquettes x-axe dans matplotlib dans ce format:Matplotlib irrégulière date x-axe étiquettes?

'..., 8 octobre 08 nov, 08 déc, 9 janvier 09 Feb, Mar 09, ...'

Est-il possible de ne montrer que le numéro de l'année pour janvier pour chaque année?

'..., Oct, Nov, Dec 09 janvier, février, mars ...'

Répondre

3

Faisant suite sur la réponse de Jouni est ici un exemple rapide et sale:

import matplotlib.pyplot as plt 
import matplotlib.ticker as ticker 
import random, datetime 

# generator to just get 20 dates += 30 days 
def nextDate(): 
     date = datetime.date(2008, 12,01) 
     while 1: 
     date += datetime.timedelta(days=30) 
     yield (date) 

nd = nextDate() 
some_dates = [nd.next() for i in range(0,20)] #get 20 dates 
ys = [random.randint(1,100) for i in range(0,20)] # get dummy y data 

plt.plot([i for i in range(0,20)],ys) #plot dummy data 

def format_date(x, pos=None): 
    date = some_dates[int(x)] 
    if date.month == 1: 
     return date.strftime('%b %Y') 
    else: return date.strftime('%b') 

xAxis = plt.axes().xaxis 
xAxis.set_major_locator(ticker.FixedLocator([i for i in range(0,20)])) #show all 20 dates on xaxis 
xAxis.set_major_formatter(ticker.FuncFormatter(format_date)) # custom format 
for tl in xAxis.get_ticklabels(): 
     tl.set_fontsize(10) 
     tl.set_rotation(30) 
     # rotate and pretty up 

plt.show() 

alt text http://www.imagechicken.com/uploads/1265573633082937000.png