Как построить сюжетную линию в реальном времени - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть датчик влажности, который собирает данные из окружающей среды и сохраняет их в data_temp.csv. Проблема в том, что некоторые из этих собранных данных являются значениями None. Когда я делаю это, рис. показывает продолжение строки, и оно игнорирует значение None.

То, что я хочу, нанесите значения, показанные в таблице, и, если значения Нет, прервите линию, а когда значение появится снова, построите линию.

мой код:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.animation as animation
from datetime import datetime

fig = plt.figure()
rect = fig.patch
rect.set_facecolor('#4169E1') ##0079E7
def animate(i):
    ftemp = 'data_temp.csv'
    fh = open(ftemp)
    hum = list()
    timeC = list()
    for line in fh:
       pieces = line.split(',')
       degree = pieces[0]
       degree2 = pieces[1]
       timeB=  pieces[2]
       timeA= timeB[:8]
       time_string = datetime.strptime(timeA,'%H:%M:%S')
    #print time_string
       try:
         hum1.append(float(degree))
         timeC.append(time_string)
       except:
         print ("---------")            
         ax1 = fig.add_subplot(1,1,1,axisbg='white')

         ax1.xaxis.set_major_formatter(mdates.DateFormatter('%M'))
         ax1.clear()
         ax1.plot(timeC,hum1, 'c', linewidth = 2.3, label='Humidity',color="blue",marker='o',linestyle='dashed',markersize=10)
         ax1.legend()
         plt.title('Humidity')
         plt.xlabel('Time')

ani = animation.FuncAnimation(fig, animate, interval = 6000) 
plt.show()`

Это мой файл data_temp.csv

1 Ответ

0 голосов
/ 08 ноября 2018

вы можете использовать numpy.ma - замаскированные массивы не показывают некоторые данные. Я сделаю небольшую демонстрацию, а не всю анимацию, просто скажем, один кадр:

Ваш пример данных:

None,24.0,12:18:49
40.0,24.0,12:18:55
41.0,24.0,12:18:59
40.0,24.0,12:19:02
None,24.0,12:19:06
None,24.0,12:19:09
None,24.0,12:19:13
None,24.0,12:19:19
41.0,24.0,12:19:22

И код:

import matplotlib.pyplot as plt
import numpy
from datetime import datetime
import numpy.ma

with open('data_temp.csv', 'r') as f:
    times = []
    hum = []

    # parse the file
    for line in f:
        # split each line
        spl = line.strip().split(',')
        # append times - x axis points
        times.append(datetime.strptime(spl[2][:8],'%H:%M:%S'))
        # append humidities - y axis points is valie, else a placeholder -999
        hum.append(float(spl[0]) if spl[0] != 'None' else -999)

    fig = plt.figure()
    ax = fig.add_subplot(111)

    # convert to numpy arrays
    hum = numpy.array(hum)
    times = numpy.array(times)

    # not let's mask all x-axis points where humidity is not valid, ie == -999
    times_masked = numpy.ma.masked_where(hum == -999, times)
    # let's also mask all y-axis points where humidity not valid
    hum_masked = numpy.ma.masked_where(hum == -999, hum)

    # plto as a step function
    ax.step(times_masked, hum_masked)

Создает фигуру вроде:

enter image description here

«Нет» записей опущены, но остальные на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...