Gráfico Online com duas linhas (MATPLOTLIB) - samur2d2/Python GitHub Wiki
Para utilizar os cógidos, é preciso ter a biblioteca matplolib instalada.
É necessário criar um arquivo para cada código mostrado abaixo. Também é necessário, inicialmente, criar três arquivos de texto, com os nomes “dadosLAST.txt”, “dadosPID_23102022.txt” e “dadosSET_23102022.txt”
Para rodar a simulação, basta executar o código com nome mainAdd e, em seguida, o código com nome mainGraficoOnline.
A imagem abaixo ilustra todos os arquivos que devem ser criados:

import matplotlib.pyplot as plotter
from matplotlib.animation import FuncAnimation
lerDadosPID = "dadosPID_23102022.txt"
lerDadosSET = "dadosSET_23102022.txt"
fig, ax = plotter.subplots()
def animar(i):
xPID, yPID = [], []
xSET, ySET = [], []
with open(lerDadosPID, 'r') as fonte:
dadosPID = fonte.read()
for linha in dadosPID.split('\n'):
if len(linha) == 0:
continue
for dadosLinha in linha.split('; '):
xi, yi = dadosLinha.split(',')
xPID.append(xi)
try:
yPID.append(float(yi))
except:
yPID.append(0)
with open(lerDadosSET, 'r') as fonte:
dadosSET = fonte.read()
for linha in dadosSET.split('; '):
if len(linha) == 0:
continue
xi, yi = linha.split(',')
xSET.append(xi)
try:
ySET.append(float(yi))
except:
ySET.append(0)
ax.clear()
ax.plot(xSET,ySET)
ax.plot(xPID,yPID)
for tick in ax.get_xticklabels():
tick.set_rotation(90)
last = open('dadosLAST.txt', 'r')
lastWrite = last.read()
last.close()
limSupMin = lastWrite[0:2]
limSupSec = lastWrite[3:5]
limInfMin = ""
limInfSec = ""
if int(limSupSec) >= 20:
limInfMin = limSupMin
if int(limSupSec) < 30:
limInfSec = str("0"+str(int(limSupSec)-20))
else:
limInfSec = str(int(limSupSec)-20)
else:
if int(limSupMin) > 0:
limInfMin = str("0"+str(int(limSupMin)-1))
faltando = 20-int(limSupSec)
limInfSec = str(59-faltando)
else:
limInfMin = "00"
limInfSec = "00"
plotter.xlim(limInfMin+":"+limInfSec, limSupMin+":"+limSupSec)
ani = FuncAnimation(fig, animar, interval = 500)
plotter.show()
from time import sleep
addPID = "dadosPID_23102022.txt"
def gravar(msg):
fonte = open(addPID, 'a')
fonte.write(msg)
fonte.close()
sleep(1)
if msg != "\n":
fonte = open('dadosLAST.txt', 'w')
fonte.write(msg[:-1])
fonte.close()
def startTimer(min, seg):
if min < 10:
if seg < 10:
gravar("0"+str(min) +":"+ "0"+str(seg) + ",")
else:
gravar("0"+str(min) +":"+ str(seg) + ",")
else:
if seg < 10:
gravar(str(min) +":"+ "0"+str(seg) + ",")
else:
gravar(str(min) +":"+ str(seg) + ",")
gravar('\n')
import random
from time import sleep
random.seed()
addPID = "dadosPID_23102022.txt"
def gravar(msg):
fonte = open(addPID, 'a')
if msg != "\n":
fonte.write(msg+"; ")
else:
fonte.write(str(random.randrange(5))+msg)
fonte.close()
def startPID(min, seg):
if seg == 59:
gravar('\n')
else:
gravar(str(random.randrange(5)))
import fakePID
import salvarPID
for min in range(2):
for seg in range(60):
salvarPID.startTimer(min, seg)
fakePID.startPID(min, seg)