Один и тот же график отображается по разному, когда для оси Х используются разные источники данных

dataRSI = pd.Series(ticker_df['Close'])
ticker_df['RSI'] = RSI(dataRSI, 14)

plt.figure(figsize=(16, 5), dpi=120, facecolor='w', edgecolor='k')

# plot RSI
plt.plot(x_data, ticker_df['RSI'], '-', markersize=0.5, color='blue', alpha=0.9)

plt.show()

Параметр x_data может заполнятся двумя путями:

  1. x_data = ticker_df.index.tolist() - т.е по оси Х я использую индексы, а не даты
  2. x_data = ticker_df['Date'] - поле из pandas.dataframe содержащее datetime.

В первом случае я получаю красивый график, аккуратный: введите сюда описание изображения А во втором — по положению в сетке координат всё в порядке, но вид — корявая ломаная линия. введите сюда описание изображения Почему такая разная отрисовка — не могу понять. Может кто сумеет подсказать?


Ответы (2 шт):

Автор решения: MarianD

Потому, что индексы разложены равномерно, а даты нет.

Например, индексы могут быт 0, 1, 2, а даты 2020-1-1, 2020-1-2, 2020-1-5.

Индексы, графически

0            1            2

Даты, графически

2020-1-1  2020-1-2                                         2020-1-5
→ Ссылка
Автор решения: CrazyElf

Ну вот смотрите, в рабочие дни торги проводятся, данные скачут туда-сюда, получается красивый график. В выходные торгов нет, данных за те даты, которые приходятся на выходные, соответственно нет. Теперь смотрим на графики:

  1. Первый график у вас просто пропускает выходные дни, рисуя график только за те моменты, на которые есть данные.
  2. Во втором графике отображаются все даты, даже те, за которые нет никаких данных. Ну, просто так принято - мало ли по какой причине у вас данные на дату пропущены, даты всё-равно рисуются по шкале X с одним и тем же шагом, последовательно. Но как-то ведь надо при этом соединить одну точку, когда были данные (на пятницу) с другой точкой, когда в следующий раз были данные (понедельник). Получается прямая линия между двумя точками, длиной 2 дня, которая вам не нравится.

В принципе, вы можете сделать так, чтобы второй график был похож на первый. Для этого вам надо задать вашу разметку оси X, сделав пропуски в разметке в тех местах, где отсутствуют данные. Варианты, как именно это сделать есть в ответах на этот вопрос на английском Stack Overflow.

→ Ссылка