我正在将传感器sendig数据模拟到一台服务器,该服务器将数据值(从1到3的随机值)和完整日期(Y-m-d H:m:s)保存到数据库。
我的绘图程序正在访问数据库并在输入数据时对其进行绘图。起初我以为那是行不通的,但是只要我绘制我的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)
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)
#ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))
plt.gca().xaxis.set_major_locator(mdates.DateFormatter('%Y-%m-%d %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=mdates.num2date(kwargs['x']).strftime('%H:%M:%S'))
datacursor(ax1, formatter = print_coords)
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
该代码在没有使用animate函数中的参数i的情况下运行良好,并且我已经尝试绘制一个空图(线,= ax1.plot_dates([],[])),然后在其中设置数据动画函数(line.set_data(x,y)),但到目前为止没有成功。
谢谢!
答案 0 :(得分:0)
好吧,看来我找到了一种可行的方法。
将xaxis定位器更改为:
plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())
而且,每次更新数据库时,它都会更新!
谢谢