Форматеры не позволяют указывать на них условия. В зависимости от диапазона серии AutoDateFormatter попадет либо в диапазон date.autoformatter.month
, либо в диапазон date.autoformatter.year
.
Кроме того, AutoDateLocator
может вообще не решить отметить первое января.
Поэтому я бы предложил указать тикеры непосредственно в желаемом формате и в нужном месте. Вы можете использовать большие галочки, чтобы показать годы, и второстепенные галочки, чтобы показать месяцы. Затем формат для основных меток может получить разрыв строки, чтобы не перекрываться с второстепенными метками.
import matplotlib.pyplot as plt
import matplotlib.dates
from datetime import datetime
t = [datetime(2016,1,1), datetime(2017,12,31)]
x = [0,1]
fig, ax = plt.subplots()
ax.plot(t,x)
ax.xaxis.set_major_locator(matplotlib.dates.YearLocator())
ax.xaxis.set_minor_locator(matplotlib.dates.MonthLocator((1,4,7,10)))
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("\n%Y"))
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter("%b"))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center")
plt.show()
Затем вы также можете адаптировать длины второстепенных тиков, чтобы они соответствовали длинам основных, если это необходимо,
ax.tick_params(axis="x", which="both", length=4)
person
ImportanceOfBeingErnest
schedule
09.04.2018