ось оси Python Matplotlib сжимается по мере поступления данных - PullRequest
0 голосов
/ 01 декабря 2018

'' '- Привет всем, у меня небольшая проблема, любая помощь действительно ценится, у меня есть оборудование, которое измеряет температуру и влажность. Я использую python для отображения графика в реальном времени

проблема: через 10 секунд xось затопляется со временем, пожалуйста, смотрите фото, чтобы получить четкое представление о проблеме

как мне избавиться от этой проблемы Ось X не очищена, поскольку новые и новые данные приходят вовремя, сжимаются на х-axis.

Кроме того, у меня есть функция, которая добавляет данные в базу данных. Я хочу добавить эти данные через каждые 10 секунд.сон не работает

'' '

 import serial
 import sqlite3
 import datetime
 import time
 import matplotlib.pyplot as plt
 from matplotlib import style
 import matplotlib.animation as animation
 from matplotlib.backends.backend_tkagg import 
 FigureCanvasTkAgg ,NavigationToolbar2Tk
 import threading
 style.use('ggplot')
 fig=plt.figure()
 ax1=fig.add_subplot(111)
 x_axis=[]               # time in str
 y_axis_t=[]             # contains live data from sensor
 y_axis_h=[]  

 def add_db(time,t,h,dt):
    conn=sqlite3.connect('Temperature.db')
    c=conn.cursor()

    c.execute("""
    CREATE TABLE IF NOT EXISTS data 
    (Time TEXT,Temperature TEXT,Humidity TEXT,Date TEXT)""")

    c.execute(""" INSERT INTO data
    (Time, Temperature, Humidity, Date)
    VALUES (?, ?, ?, ?)""", (time, t, h, dt))

    conn.commit()
    c.close()
    conn.close()

def read_data():
arduinodata =serial.Serial('COM8',9600,timeout=0.1)
while arduinodata.inWaiting:
    val=arduinodata.readline().decode('ascii')
    if len(val) == 13 :
        return val

def process():

    h,t=read_data().split(',')

    mytime = datetime.datetime.now()
    tm= '{}:{}:{}'.format(mytime.hour,mytime.minute,mytime.second)
    dt= '{}/{}/{}'.format(mytime.month,mytime.day,mytime.year)

    print(tm,str(t),str(h),str(dt),end='')


    x_axis.append(tm)
    y_axis_t.append(t)
    y_axis_h.append(h)

    return tm,str(t),str(h),str(dt)

def animate(i):


    ax1.clear()
    tm,t,h,dt=process()


    # i want to convert x axis time to timestamp how ?
    ax1.plot(y_axis_t,label='Temperature',color='r')
    ax1.fill_between(x_axis, y_axis_t, color='r', alpha=0.2)


    # i want to convert x axis time to timestamp how ?
    ax1.plot(x_axis,y_axis_h, label='Humidity',color='b')
    ax1.fill_between(x_axis, y_axis_h, color='b', alpha=0.2)

    for label in ax1.xaxis.get_ticklabels():
        label.set_rotation(45)

    plt.xlabel('Time ')
    plt.ylabel('Temperature in C and Humidity in %')
    plt.title('DHT-11 Sensor Graph ')
    plt.legend()

if __name__ == '__main__':
    ani=animation.FuncAnimation(fig, animate, interval=1000)
  plt.show()

На рисунке видно, как сжимается ось x, когда поступает больше данных

...