mpld3 不能正确显示 x 轴上的日期

Posted

技术标签:

【中文标题】mpld3 不能正确显示 x 轴上的日期【英文标题】:mpld3 does not display dates on x axis correctly 【发布时间】:2017-05-16 13:37:23 【问题描述】:

我正在使用 matplotlib 从数据库中绘制一个大型数据集,并使用 mpld3 将图形传递给浏览器。在 x 轴上有日期。这里的问题是,虽然没有 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()

这完美地显示了这样的情节: 。

现在,如果我只注释掉这一行:

plt.show()

并取消注释这两个:

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

该图在浏览器中显示如下:

如您所见,唯一的问题是日期在 x 轴上的显示方式。 有什么办法可以克服吗?

【问题讨论】:

【参考方案1】:

上面的答案是正确的。

例如,如果您只传递日期

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)

【讨论】:

【参考方案2】:

在创建 HTML 图之前,添加以下行以指定它是一个日期轴:

ax.xaxis_date()

【讨论】:

以上是关于mpld3 不能正确显示 x 轴上的日期的主要内容,如果未能解决你的问题,请参考以下文章

在 x 轴上显示工作日而不是 Grafana 上的日期

课程日期 x 轴上的 ggplot geom_vline

线图不显示轴上的所有日期

如何以特定间隔解析D3上的日期

Seaborn 条形图中 X 轴上的排序和格式化日期

堆叠列不格式化 x 轴上的日期时间戳