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

Как изменить диапазон оси x с datetimes в MatPlotLib?

Я пытаюсь построить график дат по оси x и значениям по оси y. Он отлично работает, за исключением того, что я не могу получить диапазон оси X, чтобы он соответствовал. Диапазон по оси x всегда с января 2012 по январь 2016 года, несмотря на то, что мои даты были с сегодняшнего дня. Я даже указываю, что xlim должен быть первой и последней датой.

Я пишу это для python-django, если это актуально.

 import datetime
 import matplotlib.pyplot as plt

 x = [datetime.date(2014, 1, 29), datetime.date(2014, 1, 29), datetime.date(2014, 1, 29)] 
 y = [2, 4, 1]

 fig, ax = plt.subplots()
 ax.plot_date(x, y)
 ax.set_xlim([x[0], x[-1]])

 canvas = FigureCanvas(plt.figure(1))
 response = HttpResponse(content_type='image/png')
 canvas.print_png(response)
 return response

И вот результат: enter image description here

4b9b3361

Ответ 1

Edit:

Увидев фактические данные из OP, все значения совпадают с датой/временем. Таким образом, matplotlib автоматически масштабирует ось x. Вы все же можете вручную установить пределы оси x с помощью объектов datetime


Если я сделаю что-то подобное на matplotlib v1.3.1:

import datetime
import matplotlib.pyplot as plt

x = [datetime.date(2014, 1, 29), datetime.date(2014, 1, 29), datetime.date(2014, 1, 29)] 
y = [2, 4, 1]

fig, ax = plt.subplots()
ax.plot_date(x, y, markerfacecolor='CornflowerBlue', markeredgecolor='white')
fig.autofmt_xdate()
ax.set_xlim([datetime.date(2014, 1, 26), datetime.date(2014, 2, 1)])
ax.set_ylim([0, 5])

Я получаю:

enter image description here

И ограничения по осям соответствуют датам, которые я указал.