Графики mpf и plt не сходятся по временной шкале
Я пытаюсь отобразить 4 графика которые связанны по оси x, 1 из которых отображается при помощи mpf остальные plt, но они не сходятся по времени по непонятной мне причине ,входные данные из одного источника. Вот код:
fig, (ax1,ap1,ap2,ap3) = plt.subplots(4, 1, sharex=True)
mpf.plot(df_1m,type='candle',style='sas',ax=ax1,volume=False)
ap1.plot(df_1m['rsi'], label= '1m')
ap2.plot(df_5m['rsi'], label = '5m')
ap3.plot(df_h1['rsi'], label = '1h')
ap1.legend()
ap2.legend()
ap3.legend()
mpf.show()
фигура выглядит так,отображается только одна метка времени

Заранее спасибо за ответы
Ответы (1 шт):
Проблема возникает из-за того, что mpf.plot() (из библиотеки mplfinance) интерпретирует ось X как дату и время в формате Matplotlib (числовой формат), а простые графики из plt.plot() воспринимают ось X как числовой индекс (0, 1, 2 и т.д.).
Даже если данные имеют одни и те же метки времени, простые вызовы plt.plot(df['column']) используют просто числовые индексы по умолчанию (от 0 до N), в то время как mpf.plot() автоматически распознаёт индекс как дату/время.
fig, (ax1, ap1, ap2, ap3) = plt.subplots(4, 1, sharex=True, figsize=(12,8))
mpf.plot(df_1m, type='candle', style='sas', ax=ax1, volume=False, show_nontrading=True)
ap1.plot(df_1m.index, df_1m['rsi'], label='RSI 1m')
ap2.plot(df_5m.index, df_5m['rsi'], label='RSI 5m')
ap3.plot(df_h1.index, df_h1['rsi'], label='RSI 1h')
ap1.legend()
ap2.legend()
ap3.legend()
# Дополнительно: форматируем ось X, чтобы отображалась дата и время
import matplotlib.dates as mdates
ax3 = ap3 # нижний график для форматирования оси X
ax3.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
fig.autofmt_xdate()
plt.show()