Нерегулярные метки даты в matplotlib - PullRequest
1 голос
/ 07 февраля 2010

В настоящее время у меня есть метки оси x даты в matplotlib в этом формате:

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

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

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

Ответы [ 2 ]

3 голосов
/ 07 февраля 2010

В ответ на ответ Джуни приведу быстрый и грязный пример:

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()

альтернативный текст http://www.imagechicken.com/uploads/1265573633082937000.png

0 голосов
/ 07 февраля 2010

Используйте пользовательский форматер, как в этом примере:

http://matplotlib.sourceforge.net/examples/api/date_index_formatter.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...