【问题标题】:Plot huge amount of data with dates in x-axis在 x 轴上绘制带有日期的大量数据
【发布时间】:2017-05-14 20:36:43
【问题描述】:

我有一个包含大约 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 轴上? 当然不是所有的日期都可以显示,但是由于绘图周期是动态的(我将我想要的日期插入到 web 表单中),有没有办法对其进行编程,以便每次都能获得最好的情节?

到目前为止,我可以将所有日期放在一个列表中,将所有 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 时间。 有谁知道这个插件有什么问题吗?

【问题讨论】:

    标签: python date matplotlib plot mpld3


    【解决方案1】:

    问题在于大量的点(每秒一个是一个捆绑!)。如果您尝试将每个点绘制为一个圆圈,您将遇到这些问题。 不过改成折线图很容易解决,改:

    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')
    

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

    【讨论】:

    • 谢谢,但是你知道解决x轴标签问题的方法吗?即使我尝试放大,时间也只会出现(而不是日期)并且它们彼此重叠。我想要的是以最好的方式呈现日期,即使对于这些大数据集,也不会重叠,当然,只保留其中的一些。
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多