loading

problem with annotate()

Hi
im trying to plot live data on python from an arduino through the serial port 
i found some difficult with annotate function
i don't know how to configure the third parameter (position)


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)

Kiteman1 year ago

(If you move this to the technology/microcontroller forum, you should get more views from the people that can help.)