Help with annotate function in python
Hi everyone
I'm trying to plot live data on Python from an arduino through the serial port.
I found some difficulties with annotate function.
I don't know how to configure it or whether the place where I have put annotate function is it the the right place or not
For example: for every point in temperature, i want the value to be printed next to the point ?
this is my python code
import serial # import Serial Library
import time #import time
import numpy # Import numpy
import matplotlib.pyplot as plt #import matplotlib library
from drawnow import *
temperature= []
vitesse= []
charge= []
current= []
Time = []
arduinoData = serial.Serial('com5', 9600) #Creating our serial object named arduinoData
plt.ion() #Tell matplotlib you want interactive mode to plot live data
cnt=0
##fig1 = plt.figure()
STARTINGTIME = round(time.time(),2)
def makeFig(): #Create a function that makes our desired plot
plt.subplot(2,2,1)
plt.subplot(2,2,1).annotate(str(temperature)+','+ str(Time), textcoords='offset points')
plt.title('Live Streaming Temperature Sensor Data')
plt.ylabel('Temperature C')
plt.grid(True)
plt.plot(temperature, 'ro-')
plt.subplot(2,2,2)
plt.subplot(2,2,2).annotate(str(vitesse)+','+ str(Time), textcoords='offset points')
plt.title('Live Streaming Speed Sensor Data')
plt.ylabel('Speed KM/H')
plt.grid(True)
plt.plot(vitesse, 'bo-')
plt.subplot(2,2,3)
plt.subplot(2,2,3).annotate(str(charge)+','+ str(Time), textcoords='offset points')
plt.title('Live Streaming SOC Sensor Data')
plt.ylabel('Battery Charge %')
plt.grid(True)
plt.plot(charge, 'go-')
plt.subplot(2,2,4)
plt.subplot(2,2,4).annotate(str(current)+','+ str(Time), textcoords='offset points')
plt.title('Live Streaming Current Sensor Data')
plt.ylabel('Current A')
plt.grid(True)
plt.plot(current, 'yo-')
while True: # While loop that loops forever
while (arduinoData.inWaiting()==0): #Wait here until there is data
pass #do nothing
arduinoString = arduinoData.readline() #read the line of text from the serial port
dataArray = arduinoString.split(';') #Split it into an array called dataArray
temp = float (dataArray[0])
vite = float (dataArray[1])
char = float (dataArray[2])
curr = float (dataArray[3])
temperature.append(temp) #Build our temperature array by appending temp readings
vitesse.append(vite) #Build our vitesse array by appending temp readings
charge.append(char) #Build our charge array by appending temp readings
current.append(curr) #Build our current array by appending temp readings
Time.append(round(time.time(),2) - STARTINGTIME)
drawnow(makeFig) #Call drawnow to update our live graph
plt.pause(0.00001)
cnt=cnt+1
if(cnt>50):
temperature.pop(0)
vitesse.pop(0)
charge.pop(0)
current.pop(0)
Discussions