Двойные Оси отменяют тики оригинальных Топоров - PullRequest
2 голосов
/ 30 апреля 2019

Я сталкиваюсь с удивительным поведением в отношении локаторов тиков и двойных осей.У меня есть 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')

enter image description here

Затем я создаю двойник 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)

enter image description here Как вы можете видеть, формат уже не "%d/%m %H:%M", который я указывал больше, но стал "%y-%m-%d".

Еще более тревожным, если я установлю окно x изатем нарисуйте что-нибудь на ax2, мой локатор тиков игнорируется, и используется локатор по умолчанию.

# ...
ax.set_xlim(start, start + dt.timedelta(days=1))
ax.plot(x, y)

Этот код дает следующий рисунок:

enter image description here

# ...
ax.set_xlim(start, start + dt.timedelta(days=1))

ax2 = ax.twinx()
ax2.plot(x, y)

Но это создает следующее:

enter image description here Основные тики появились (я полагаю) в местах по умолчанию.

Согласно,новый Axes и оригинальный должны разделить свои пределы, отметки и масштаб по оси X:

Документ о Figure.add_axes, называемый Axes.twinx

sharex, sharey: Axees, необязательно

Совместно используйте оси x или y с sharex и / или sharey.Ось будет иметь те же пределы, отметки и масштаб, что и ось общих осей.

Итак, что мне здесь не хватает?Почему построение графиков на ax2 влияет на тики ax, которые я установил вручную?

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