Я сталкиваюсь с удивительным поведением в отношении локаторов тиков и двойных осей.У меня есть Axes
объект, и я устанавливаю matplotlib.dates.DayLocator
в качестве его основного локатора, а matplotlib.dates.DateFormatter
в качестве его основного форматера.
import datetime as dt
import numpy as np
from matplotlib import figure as mpfig
from matplotlib.backends import backend_agg as mpback
from matplotlib import dates as mpdates
start = dt.datetime(2018, 2, 16)
end = start + dt.timedelta(days=10)
fig = mpfig.Figure(figsize=(16, 4))
mpback.FigureCanvas(fig)
ax = fig.add_subplot(111)
ax.xaxis.set_major_locator(mpdates.DayLocator())
ax.xaxis.set_major_formatter(mpdates.DateFormatter("%d/%m %H:%M"))
ax.grid(True)
x = np.arange(start, end, dt.timedelta(days=1)).astype(dt.datetime)
y = np.random.randint(10, 1000, size=x.size)
ax.plot(x, y)
fig.savefig('test.png')

Затем я создаю двойник Axes
этого с ax.twinx()
Но как только я что-то строю на новом Axes
, формат тиков становится стандартным.
# ...
x = np.arange(start, end, dt.timedelta(days=1)).astype(dt.datetime)
y = np.random.randint(10, 1000, size=x.size)
ax2 = ax.twinx()
ax2.plot(x, y)
Как вы можете видеть, формат уже не "%d/%m %H:%M"
, который я указывал больше, но стал "%y-%m-%d"
.
Еще более тревожным, если я установлю окно x изатем нарисуйте что-нибудь на ax2
, мой локатор тиков игнорируется, и используется локатор по умолчанию.
# ...
ax.set_xlim(start, start + dt.timedelta(days=1))
ax.plot(x, y)
Этот код дает следующий рисунок:

# ...
ax.set_xlim(start, start + dt.timedelta(days=1))
ax2 = ax.twinx()
ax2.plot(x, y)
Но это создает следующее:
Основные тики появились (я полагаю) в местах по умолчанию.
Согласно,новый Axes
и оригинальный должны разделить свои пределы, отметки и масштаб по оси X:
Документ о Figure.add_axes
, называемый Axes.twinx
sharex, sharey: Axees, необязательно
Совместно используйте оси x или y с sharex и / или sharey.Ось будет иметь те же пределы, отметки и масштаб, что и ось общих осей.
Итак, что мне здесь не хватает?Почему построение графиков на ax2
влияет на тики ax
, которые я установил вручную?