Установить поля временного ряда, построенного с помощью панд

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

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=񟭓-01-01', end=񟭓-12-31',
                                       periods=30))
series.plot(ax=ax)

введите описание изображения здесь

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

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

введите описание изображения здесь

Я ищу автоматический метод, такой как padding = 0.1 (10% пробелов вокруг графика)

Всего 2 ответа


Панды и matplotlib, похоже, довольно часто путаются, когда сотрудничают, когда топоры имеют даты. По какой-то причине в этом случае ax.margins не работает 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 для use_sticky_edges значение False и вызывается autoscale_view после установки полей, но, похоже, здесь это не работает.

ax.use_sticky_edges = False
ax.autoscale_view(scaley=True, scalex=True)

Вы можете использовать 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=񟭓-01-01', end=񟭓-12-31',
                                       periods=30))

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

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

series.plot(ax=ax)


Есть идеи?

10000