Установите поля временного ряда, нанесенного с помощью pandas - PullRequest
2 голосов
/ 16 января 2020

У меня есть следующий код для создания графика временных рядов

import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
series = pd.Series([np.sin(ii*np.pi) for ii in range(30)],
                   index=pd.date_range(start='2019-01-01', end='2019-12-31',
                                       periods=30))
series.plot(ax=ax)

enter image description here

Я хочу установить автоматический c предел для x и у, я попытался использовать ax.margins (), но, похоже, он не работает:

ax.margins(y=0.1, x=0.05)
# even with
# ax.margins(y=0.1, x=5)

enter image description here

То, что я ищу, это automati c метод, такой как padding = 0.1 (10% пробела вокруг графика)

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Pandas и matplotlib, похоже, довольно часто путают, когда сотрудничают, когда топоры имеют даты. По какой-то причине в этом случае ax.margins не работает должным образом с осью X.

Вот обходной путь, который, кажется, делает работу, явно перемещая xlims:

xmargins = 0.05
ymargins = 0.1
ax.margins(y=ymargins)
x0, x1 = plt.xlim()
plt.xlim(x0-xmargins*(x1-x0), x1+xmargins*(x1-x0))

В качестве альтернативы, вы можете работать непосредственно с графиком matplotlib, который работает как положено, применяя поля к оси даты.

ax.plot(series.index, series)
ax.margins(y=0.1, x=0.05)

PS: Этот пост говорит о настройке use_sticky_edges Ложь и вызов autoscale_view после установки полей, но также это, кажется, не работает здесь.

ax.use_sticky_edges = False
ax.autoscale_view(scaley=True, scalex=True)
1 голос
/ 16 января 2020

Вы можете использовать ax.set_xlim и ax.set_ylim , чтобы установить пределы x и y вашего графика соответственно.

import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
series = pd.Series([np.sin(ii*np.pi) for ii in range(30)],
                   index=pd.date_range(start='2019-01-01', end='2019-12-31',
                                       periods=30))

# set xlim to be a between certain dates
ax.set_xlim((pd.to_datetime('2019-01-01'), pd.to_datetime('2019-01-31'))

# set ylim to be between certain values
ax.set_ylim((-0.5, 0.5))

series.plot(ax=ax)

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