J'ai besoin de tracer en temps réel une série de nombres à virgule flottante à partir du port série. Ces valeurs sont sepparated par le caractère « \ n », de sorte que la séquence de données est quelque chose comme ceci: x1 x2 x3 ...Tracé en temps réel python en utilisant pyqtgraph
Comment voulez-vous tracer les données? J'utilise une carte Arduino, le débit de données est de 200 échantillons/s, et mon PC fonctionne sous Windows7 64 bits. Je pense qu'un bon choix est d'utiliser la bibliothèque pyqtgraph. J'ai commencé à utiliser l'exemple Plotting.py dans pyqtgraph, mais je ne sais pas comment adapter ce code à mes besoins (voir ci-dessous). Merci beaucoup d'avance.
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
# Set graphical window, its title and size
win = pg.GraphicsWindow(title="Sample process")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
# Random data process
p6 = win.addPlot(title="Updating plot")
curve = p6.plot(pen='y')
data = np.random.normal(size=(10,1000)) # If the Gaussian distribution shape is, (m, n, k), then m * n * k samples are drawn.
# plot counter
ptr = 0
# Function for updating data display
def update():
global curve, data, ptr, p6
curve.setData(data[ptr%10])
if ptr == 0:
p6.enableAutoRange('xy', False) ## stop auto-scaling after the first data set is plotted
ptr += 1
# Update data display
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)
## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
Votre problème n'est pas assez bien défini. Le code que vous présente trace une liste de flottants contenus dans un objet nommé 'data'. C'est une partie de votre tâche, bien sûr, mais qu'en est-il du flux de données de l'Arduino? Comment est-il formaté et comment proposez-vous de l'analyser en nombres? Jusqu'à ce que vous répondiez à cela, il y a très peu de choses que n'importe qui peut dire. –
Ma carte arduino transmet une série de valeurs flottantes suivies de caractères \ n ': x1 x2 x3 ... Je veux tracer ces valeurs en temps réel. Comment puis-je le faire, s'il vous plaît? Merci pour votre temps. – fmarengo
Voici ce que je ferais: obtenir le paquet Python pour accéder aux ports série (PySerial). Installez-le. Écrivez un script pour ouvrir COM10 avec la vitesse de transmission correcte et d'autres paramètres de port. Dans une boucle serrée rassembler les données de l'Adruino. Convertissez chaque chaîne en float et imprimez-la sur la console. Assurez-vous qu'il n'y a pas d'erreurs. Ce n'est qu'après avoir travaillé que vous devriez aborder le problème du tracé en temps réel. Si vous avez besoin d'aide pour faire fonctionner cette boucle d'acquisition de données, postez une question différente ici sur SO et vous devriez obtenir l'aide dont vous avez besoin. –