Линейный график Matplotlib не отображает последовательность дат кадра данных на оси X должным образом - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть этот фрейм данных:

df1.head()
Out[107]: 
   crashes       date
0     90.0 2019-10-31
1     77.0 2019-10-30
2     93.0 2019-10-29
3     79.0 2019-10-28
4     72.0 2019-10-27

Теперь я хочу применить операцию обнаружения аномалий к этим данным. Я выбрал метод SD-ESD. Вот сценарий:

outliers_indices = sesd.seasonal_esd(df1.crashes,seasonality = 25, hybrid=True, max_anomalies=365, alpha = 3)

x= df1.crashes[:320]
y=df1.date[:320]

outliers = []
sorted_outliers_indices = np.sort(outliers_indices)
test_outliers_indices = sorted_outliers_indices
for idx in test_outliers_indices:
  outliers.append(df1.crashes[idx])


marks = []
for i in x:
    if i in outliers:
        marks.append(i)
    else:
        marks.append(np.NAN)

plt.figure(figsize = (20,8))
plt.plot(x)
plt.plot(marks, 'ro', markersize = "3")
plt.legend(handles=[mpatches.Patch(color='#62A3C9', label='Crashes'), mpatches.Patch(color='red', label='Crash Anomaly')])
plt.ylabel('Crashes')
plt.xlabel('Date')
display()

Моя диаграмма выглядит следующим образом, и, как вы можете видеть, даты не отображаются в правильной последовательности. Вместо этого он использует индексы точек данных. enter image description here

Когда я пробовал plt.plot (x, y), он выдает «ValueError: минимальный предел представления -36457.6 меньше 1 и является недопустимым значением даты Matplotlib. Это часто случается, если вы передаете значение, отличное от datetime, на ось с датой и временем. "

Моими столбцами даты является datetime64 [нс]. Может ли кто-нибудь помочь с этим?

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