mpld3 неправильно отображает даты по оси x

Я рисую большой набор данных из базы данных с помощью matplotlib и использую mpld3 для передачи рисунка в браузер. По оси абсцисс даты. Проблема здесь в том, что при построении графика без mpld3 работает отлично, когда я его использую, даты отображаются неправильно.

Вот мой код:

date1 = '2015-04-22 20:28:50'
date2 = '2015-04-23 19:42:09'

db = Base('monitor').open()
result_set = db.select(['MeanVoltage','time'],"time>=start and time<=stop",  start=date1, stop=date2)

V = [float(record.MeanVoltage) for record in result_set if record != 0]
Date = [str(record.time) for record in result_set]


dates = [datetime.datetime.strptime(record, '%Y-%m-%d %H:%M:%S') for record in Date]
dates = matplotlib.dates.date2num(dates)

fig, ax = plt.subplots()
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y %H:%M:%S' ))

plt.gcf().autofmt_xdate()
ax.plot(dates,V)
#mpld3.fig_to_html(fig)
#mpld3.show(fig)
plt.show()

который показывает сюжет следующим образом: first Figure.

Теперь, если я закомментирую только эту строку:

plt.show()

и раскомментируйте эти два:

mpld3.fig_to_html(fig)
mpld3.show(fig)

рисунок отображается в браузере следующим образом: второй рисунок

Как видите, единственная проблема заключается в том, как даты отображаются на оси X. Есть ли способ преодолеть это?


person tzoukritzou    schedule 02.01.2017    source источник


Ответы (2)


Перед созданием фигуры HTML добавьте следующую строку, чтобы указать, что это ось даты:

ax.xaxis_date()
person James    schedule 20.04.2018

Ответ выше правильный.

Если вы исключительно передаете даты, например

df["Date"][0] = "2018-11-23"

Затем вы также можете передать это в собственном формате mpl ниже, не создавая порядковое значение, используя date2num.

df["Date"] = [dt.datetime.strptime(d, '%Y-%m-%d') for d in df["Date"]]
ax.plot(df["Dates"].tolist(), some_y_value_list)
person James Marmarou    schedule 30.11.2018