用x轴

时间:2016-12-30 14:40:31

标签: python date matplotlib plot mpld3

我有一个包含大约100万个条目的大型数据库。在一列中,有这种形式的日期:'%Y-%m-%d%H:%M:%S。每秒都有一个条目。

我可以从数据库中选择我想要绘制的时间段,例如

date1 ='2015-04-22 20:28:50'

date2 ='2015-04-23 21:42:09'

和我要在Y轴上绘制的另一列。 正如您在特定示例中所看到的,从date1到date2,它是大约86000个条目 - 或 - 要绘制的点。

有没有办法使用matplotlib有效地绘制这些数据,日期显示在x轴上? 当然不是所有日期都可以显示,但由于绘图时间是动态的(我在网页中插入了我想要的日期),有没有一种方法可以对它进行编程,以便每次都能获得最好的情节?

到目前为止,我可以将所有日期放在列表中,将所有Y数据放在另一个列表中。

下面是我的代码到目前为止,它绘制了数据,但X轴标签没有任何接近我想要的。

from buzhug import Base
import datetime
import data_calculations as pd
import matplotlib.pyplot as plt
import matplotlib
import time

date1 = '2015-04-22 20:28:50'
date2 = '2015-04-24 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]
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()
ax.plot_date(dates, V)
plt.grid(True)
plt.show()

结果是 Plot

提前谢谢

编辑:

我已通过添加以下行来修复此问题:

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y %H:%M:%S' ))

plt.gcf().autofmt_xdate()

但是,现在我想使用mpld3插件将绘图传递给Web服务器:

mpld3.plugins.get_plugins(fig)
mpld3.fig_to_html(fig)
mpld3.show()

虽然没有插件,情节看起来很好,日期在x轴上,插件似乎无法解析这一行

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y %H:%M:%S' ))

进入html代码,因此x轴标签出现在unix时间。 有谁知道这个插件有什么问题?

1 个答案:

答案 0 :(得分:0)

问题是大量的积分(每秒一个是捆绑!)。如果您尝试将每个点绘制为圆形,则会出现这些问题。 但是通过将其更改为折线图可以轻松解决,更改:

ax.plot_date(dates, V, '-') # Where '-' means a line plot

例如:

# some sample data
x = np.linspace(0.1, np.pi, 86000)
y = np.cos(x)**2 * np.log(x)
plt.plot(x, y, 'o')

enter image description here

plt.plot(x, y, '-')

enter image description here