Построение графиков в реальном времени с ftp-сервера с использованием matplotlibPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Построение графиков в реальном времени с ftp-сервера с использованием matplotlib

Сообщение Anonymous »

Я пытаюсь получить данные графика в реальном времени из регистратора данных через FTP с помощью FuncAnimation. мне удалось получить оперативный хвост с FTP-сервера, который обновит кадр данных, но я не могу обновить график
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from ftplib import FTP
from io import BytesIO
import datetime
import time

ip_value = "192.168.100.100"
freq_time = 10 #update every 10 sec

ftp = FTP(ip_value)
ftp.login()
ftp.cwd('/sdcard/HIOKI/LR8450/DATA/')
folder_list = ftp.nlst("-t")
folder_path = folder_list[0]
ftp.cwd('/sdcard/HIOKI/LR8450/DATA/'+folder_path+'/')
file_list = ftp.nlst("-t")
file_path = file_list[0]
file_name = '/sdcard/HIOKI/LR8450/DATA/'+folder_path+'/'+file_path

flo = BytesIO()
ftp.retrbinary('RETR ' + file_name, flo.write)
flo.seek(0)
file = flo

prev_size = ftp.size(file_name) #get file size for use in updating plot

data = pd.read_csv(file, skiprows=[0,1,2,3,4,5,6,7,8,9,10,11], engine="python", encoding='unicode_escape', index_col=False, names=('time','data1','data2','alarm'))

fig, ax1 = plt.subplots()
twin1 = ax1.twinx()
fig.subplots_adjust(right=0.75)

p1, = ax1.plot(data.time, data.data1, color='black')
p2, = twin1.plot(data.time, data.data2, color='blue')

ax1.set_ylim(0, 50)
twin1.set_ylim(-.1, .1)

prev_time = datetime.datetime.now()

def get_data():
global prev_time, prev_size, data

print('getting data...')
print(datetime.datetime.now())

prev_time = datetime.datetime.now() #update previous time

current_size = ftp.size(file_name) #get current file size
size = max(current_size - (current_size - prev_size), 0) #calculate the added bytes to the file
prev_size = current_size #update previous size
flo2 = BytesIO()
ftp.retrbinary('RETR ' + file_name, flo2.write, rest=size)
flo2.seek(0)

new_data = pd.read_csv(flo2, engine="python", encoding='unicode_escape', header=None, index_col=0) #read new data
new_data.insert(loc=0, column='foo', value=[0] * len(new_data)) #insert a temp new column in index 0
new_data.columns = data.columns[range(len(new_data.columns))] #rename columns to match the data df
data = pd.concat([data, new_data]) #appened data with the new data

print('data recieved')
print(data)

return data

def draw_frame(frame):
global data

if datetime.datetime.now() - prev_time > datetime.timedelta(seconds=freq_time):
data = get_data()

p1.set_data(data.time, data.data1)
p2.set_data(data.time, data.data1)

return p1, p2

print(datetime.datetime.now())
time.sleep(freq_time)

ani = FuncAnimation(fig, draw_frame, interval=500)

plt.show()


Подробнее здесь: https://stackoverflow.com/questions/784 ... matplotlib
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»