Установка даты в качестве первой буквы на оси x с помощью matplotlib - PullRequest
2 голосов
/ 06 марта 2012

У меня есть графики временных рядов (более 1 года), где месяцы на оси х имеют форму января, февраля, марта и т. Д., Но вместо этого я хотел бы иметь только первую букву месяца (J , F, M и т. Д.). Я устанавливаю галочки с помощью

ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_minor_locator(MonthLocator())

ax.xaxis.set_major_formatter(matplotlib.ticker.NullFormatter())
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter('%b')) 

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 05 мая 2013

Я пытался заставить работать решение, предложенное @ Appleman1234, но так как я сам хотел создать решение, которое я мог бы сохранить во внешнем скрипте конфигурации и импортировать в другие программы, мне было неудобно, что форматировщик должен был переменные определены вне самой функции форматирования.

Я не решил эту проблему, но я просто хотел поделиться своим немного более коротким решением, чтобы вы и, возможно, другие могли его принять или оставить.

Оказалось, что сначала сложно получить метки, так как вам нужно нарисовать оси перед тем, как установить метки. В противном случае вы просто получаете пустые строки, когда используете Text.get_text().

Вы можете избавиться от агрумента minor=True, характерного для моего случая.

# ...

# Manipulate tick labels
plt.draw()
ax.set_xticklabels(
    [t.get_text()[0] for t in ax.get_xticklabels(minor=True)], minor=True
)

Надеюсь, это поможет:)

2 голосов
/ 06 марта 2012

Следующий фрагмент на основе официального примера здесь работает для меня.

При этом используется порядок форматирования индекса на основе функций, чтобы возвращать только первую букву месяца в соответствии с запросом.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.cbook as cbook
import matplotlib.ticker as ticker
datafile = cbook.get_sample_data('aapl.csv', asfileobj=False)
print 'loading', datafile
r = mlab.csv2rec(datafile)

r.sort()
r = r[-365:]  # get the last year

# next we'll write a custom formatter
N = len(r)
ind = np.arange(N)  # the evenly spaced plot indices
def format_date(x, pos=None):
    thisind = np.clip(int(x+0.5), 0, N-1)
    return r.date[thisind].strftime('%b')[0]


fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(ind, r.adj_close, 'o-')
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
fig.autofmt_xdate()

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