Один и тот же график отображается по разному, когда для оси Х используются разные источники данных
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 может заполнятся двумя путями:
x_data = ticker_df.index.tolist()- т.е по оси Х я использую индексы, а не датыx_data = ticker_df['Date']- поле изpandas.dataframeсодержащееdatetime.
В первом случае я получаю красивый график, аккуратный:
А во втором — по положению в сетке координат всё в порядке, но вид — корявая ломаная линия.
Почему такая разная отрисовка — не могу понять. Может кто сумеет подсказать?
Ответы (2 шт):
Потому, что индексы разложены равномерно, а даты нет.
Например, индексы могут быт 0, 1, 2, а даты 2020-1-1, 2020-1-2, 2020-1-5.
Индексы, графически
0 1 2
Даты, графически
2020-1-1 2020-1-2 2020-1-5
Ну вот смотрите, в рабочие дни торги проводятся, данные скачут туда-сюда, получается красивый график. В выходные торгов нет, данных за те даты, которые приходятся на выходные, соответственно нет. Теперь смотрим на графики:
- Первый график у вас просто пропускает выходные дни, рисуя график только за те моменты, на которые есть данные.
- Во втором графике отображаются все даты, даже те, за которые нет никаких данных. Ну, просто так принято - мало ли по какой причине у вас данные на дату пропущены, даты всё-равно рисуются по шкале X с одним и тем же шагом, последовательно. Но как-то ведь надо при этом соединить одну точку, когда были данные (на пятницу) с другой точкой, когда в следующий раз были данные (понедельник). Получается прямая линия между двумя точками, длиной 2 дня, которая вам не нравится.
В принципе, вы можете сделать так, чтобы второй график был похож на первый. Для этого вам надо задать вашу разметку оси X, сделав пропуски в разметке в тех местах, где отсутствуют данные. Варианты, как именно это сделать есть в ответах на этот вопрос на английском Stack Overflow.