2010-02-07 6 views
1

Я в настоящее время имеют метки даты по оси X в Matplotlib в этом формате:Нерегулярные метки matplotlib с пометкой по оси x?

'..., октябрь 08, ноябрь 08, декабрь 08, Jan 09, февраль 09, март 09, ...

Можно ли только показывать номер года для января на каждый год?

'..., октябрь, ноябрь, декабрь, январь 09, февраль, март, ...

ответ

3

Вслед на ответ Jouni здесь быстрый и грязный пример:

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

Смежные вопросы