首页 > 解决方案 > 如何在时间序列中使用数据游标显示(格式化)纪元到完整日期?

问题描述

我有一个自定义格式化函数来显示绘图中每个点的 Y 和 X 坐标。由于绘图是时间序列,我的 x 轴由日期组成,这使我很难显示与绘图显示完全相同的日期。

我的代码:

%matplotlib notebook
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import matplotlib.dates as mdates
from matplotlib.dates import date2num
from dateutil import parser
from bokeh.plotting import figure
import sqlite3
from mpldatacursor import datacursor
import pandas as pd
import datetime as dt
from datetime import datetime


fig = plt.figure(figsize = (10,4))
ax1 = fig.add_subplot(111)
ax1.grid(True)
plt.ion()


def animate(i):
    datas = []
    dates = []

    con = sqlite3.connect('edgedb')
    c = con.cursor()
    c.execute('SELECT data, timestamp FROM edgedata')
    data = c.fetchall()

    for row in data:
        datas.append(pd.to_datetime(row[1], format = '%Y-%m-%d %H:%M:%S').time())
        dates.append(float(row[0]))

    ax1.clear()
    ax1.plot_date(x = datas, y = dates, color = 'darkgreen', ls='-', marker='o')
    ax1.set_xticks(datas)
    plt.xticks(rotation=60, ha='right')
    plt.subplots_adjust(bottom=0.30)
    plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())
    #ax1.xaxis.set_major_formatter(mdates.DateFormatter('$H:%M:%S'))
    ax1.grid(True)
    plt.ion()


def print_coords(**kwargs):
    return 'Valor medido : {y:.6f} às {x:s}'.format(y=kwargs['y'],
                                                    x=dt.datetime.fromtimestamp(kwargs['x']).strftime('%Y-%m-%d %H:%M:%S'))
datacursor(ax1, formatter = print_coords)
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()

这样,光标正确显示了我的 Y 值,但我的 X 在第一点显示为“1970-01-01 11:59:03”,随着它的前进而增加。

绘图光标

@edit:正如我的朋友 Yuca 所说,当它们出现在我的数据库中时,我给出了一些分数。

(2.609698591082275, '2019-08-01 14:59:02')
(1.576077072171736, '2019-08-01 15:01:42')
(2.732782944225141, '2019-08-01 15:37:35')
(2.121527818052438, '2019-08-01 15:37:56')
(2.296660329191338, '2019-08-01 15:38:37')
(1.176709831423572, '2019-08-01 15:42:38')
(1.434814273623745, '2019-08-01 16:50:06')
(2.276750775178628, '2019-08-01 16:55:19')

提前致谢!

标签: python-3.xmatplotlib

解决方案


推荐阅读