Je travaille donc avec un capteur de couleur TCS3200 et Arduino Mega 2560 pour générer des valeurs RVB spécifiques. Puis, à travers le câble série, j'envoie des données à VIDLE pour Python, en séparant les 3 points de données, et en les stockant dans un tableau (mise à jour du graphe MatPlotLib tous les 50 points de données (par RGB).)MatPlotLib Python - Valeurs RVB du capteur de couleur utilisé pour changer la couleur du point de ligne
traçait les valeurs R, G, B sur trois lignes séparées ... maintenant je trace une ligne différente, basée sur un système de coordonnées (255,255,255) (y-limit est 255 * sqrt (3)). Ce que je veux faire est ceci: si mes valeurs de RVB sont (220, 60, 140), je veux pouvoir changer la couleur du point de données basé sur ces valeurs. Le point du graphe serait sqrt (pow (220,2.0) + pow (60,2.0) + pow (140,2.0)), mais la couleur doit refléter la valeur RGB.
Comment faire?
Voici ma configuration actuelle du terrain:
import serial
import numpy as np
import matplotlib.pyplot as plt
from drawnow import *
distance = []
s = serial.Serial(port='/dev/cu.usbmodem1421', baudrate=115200)
plt.ion()
cnt = 0
limit = 255*sqrt(3);
r = 0
g = 0
b = 0
def makeFig():
plt.ylim(0,limit)
plt.title('My Live Streaming Sensor Data')
plt.grid(True)
plt.ylabel('RGB Values')
plt.xlabel('Time')
# somewhere in the line below I think the RGB dynamics should be reflected
plt.plot(distance, '-', label='Distance')
plt.ticklabel_format(useOffset=True)
plt.legend(loc='upper left')
while True:
while (s.inWaiting()):
myDataString = s.readline()
try:
dataArray = myDataString.split(',')
print (dataArray)
r = float(dataArray[0])
g = float(dataArray[1])
b = float(dataArray[2])
d = float(dataArray[3].strip('\r\n')
distance.append(d)
# before this 'drawnow' gets called, should the RGB values be incorporated into the plot?
drawnow(makeFig)
plt.pause(0.000001)
cnt = cnt + 1
if (cnt > 50):
distance.pop(0)
except ValueError:
print (myDataString)
Voir cet article sur créer des exemples reproductibles: http://stackoverflow.com/help/mcve Tant que cet exemple repose sur ce mystérieux paquet 'drawnow', personne ne va être capable de vous aider. –
(même chose pour la fiabilité d'un port série pour les données, mock avec une instance 'StringIO' d'un fichier CSV) –
' drawnow' est le paquet le plus inutile que j'ai jamais vu. Il se compose littéralement de 'plt.clf()', suivi de l'appel de la fonction, et 'plt.draw()'. Mais je suis d'accord qu'un [mcve] devrait être fourni en posant une question comme celle-ci. – ImportanceOfBeingErnest