Подтвердить что ты не робот

Фильтрация даты на оси x с помощью Python matplotlib

Я пытаюсь отобразить информацию о датах. У меня есть список дат в формате "01/02/1991".

Я преобразовал их, выполнив следующие действия:

x = parser.parse(date).strftime('%Y%m%d'))

который дает 19910102

Затем я попытался использовать num2date

import matplotlib.dates as dates
new_x = dates.num2date(x)

Черчение:

plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)

Но я получаю сообщение об ошибке. В нем говорится: "ValueError: год выходит за пределы допустимого диапазона". Любые решения?

4b9b3361

Ответ 1

Как сказал @KyssTao, help(dates.num2date) говорит, что x должен быть float, дающим количество дней с 0001-01-01 плюс один. Следовательно, 19910102 не 2/янв/1991, потому что, если вы посчитали 19910101 дней с 0001-01-01, вы получите что-то в году 54513 или аналогичном (разделите на 365,25, количество дней в году).

Используйте datestr2num вместо этого (см. help(dates.datestr2num)):

new_x = dates.datestr2num(date) # where date is '01/02/1991'

Ответ 2

Вы можете сделать это проще, используя plot() вместо plot_date().

Сначала преобразуем ваши строки в экземпляры Python datetime.date:

import datetime as dt

dates = ['01/02/1991','01/03/1991','01/04/1991']
x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in dates]
y = range(len(x)) # many thanks to Kyss Tao for setting me straight here

Затем сюжет:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.plot(x,y)
plt.gcf().autofmt_xdate()

Результат:

enter image description here