Как установить даты по оси х с неравномерным интервалом? - PullRequest
2 голосов
/ 02 ноября 2011

Я хотел бы нарисовать график времени, используя модуль matplotlib.dates. Из этого урока я знаю, как установить регулярную дату, например:

ax.xaxis.set_major_locator(DayLocator())
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
ax.xaxis.set_minor_...

Однако, по моим данным, некоторые месяцы отсутствуют. Моя дата xaxis больше похожа на: январь, февраль, май, июль, сентябрь, октябрь, сентябрь ... шаблон не сформирован ...

Как мне справиться с такой ситуацией?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Если я правильно понимаю, вам может понадобиться

matplotlib.ticker.FixedLocator

Пример, который размещает метки в точках данных 1, 10 и последней:

import pylab as plt
from matplotlib.ticker import FixedLocator
from matplotlib.dates import DateFormatter
import numpy as np
from datetime import datetime

# dates (unequally spaced, but works exactly same for equally spaced dates too)
dates = plt.date2num(datetime(2010,3,1))  + np.array([0, 10, 50, 100, 180, 300])
# just some data
data = dates**2
plt.plot_date(dates,data)

ax = plt.gca()
ax.xaxis.set_major_locator(FixedLocator(dates[[1, 3, len(dates)-1]]))
# for some reason this is needed to get the month displayed too
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
plt.show()
0 голосов
/ 04 ноября 2011

Начиная с решения Мауро, я попытался построить пару данных, где даты расположены нерегулярно, чтобы я мог найти этот QA когда-нибудь в будущем.

import pylab as plt
from matplotlib.ticker import FixedLocator
from matplotlib.dates import DateFormatter
import numpy as np
from datetime import datetime

# dates, irregularly spaced
y = 2010, 2010, 2010, 2011, 2011
m =    9,   11,   12,    3,    4


dates = np.array([plt.date2num(datetime(yy,mm,1)) for yy,mm in zip(y,m)])
print dates


# just some data
data = dates**2
print data


plt.plot_date(dates,data)

ax = plt.gca()
# need some more thnking for properly locate which date to label
#ax.xaxis.set_major_locator(FixedLocator(dates[[1, 10, len(dates)-1]]))
ax.xaxis.set_major_formatter(DateFormatter("%Y-%m"))
plt.show()

enter image description here

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