Hi, I am trying to get a live scrolling graph built from data send by two arduino sensors. Although live data is being shown in the graph I am not able to get the x axis scrolling. Actually, after reaching the point established by the counter (in this case cnt>10), the plotting stops. The arduino and Python codes I am working with are included below. I would very much appreciate if you can help me getting the scrolling graph working.
ARDUINO CODE #include "Wire.h" // imports the wire library for talking over I2C #include "Adafruit_BMP085.h" // import the Pressure Sensor Library Adafruit_BMP085 mySensor; // create sensor object called mySensor float tempC; // Variable for holding temp in C float tempF; // Variable for holding temp in F float pressure; //Variable for holding pressure reading void setup(){ Serial.begin(115200); //turn on serial monitor mySensor.begin(); //initialize mySensor } void loop() { tempC = mySensor.readTemperature(); // Be sure to declare your variables tempF = tempC*1.8 + 32.; // Convert degrees C to F pressure=mySensor.readPressure(); //Read Pressure Serial.print(tempF); Serial.print(" , "); Serial.println(pressure); delay(250); //Pause between readings. } PYTHON CODE import serial # import Serial Library import numpy # Import numpy import matplotlib.pyplot as plt #import matplotlib library from drawnow import * tempF= [] pressure=[] arduinoData = serial.Serial('com6', 115200) #Creating our serial object named arduinoData plt.ion() #Tell matplotlib you want interactive mode to plot live data cnt=0 def makeFig(): #Create a function that makes our desired plot plt.ylim(0,90) #Set y min and max values plt.title('My Live Streaming Sensor Data') #Plot the title plt.grid(True) #Turn the grid on plt.ylabel('Temp F') #Set ylabels plt.plot(tempF, 'ro-', label='Degrees F') #plot the temperature plt.legend(loc='upper left') #plot the legend plt2=plt.twinx() #Create a second y axis plt.ylim(0,90) #Set limits of second y axis- adjust to readings you are getting plt2.plot(pressure, 'b^-', label='Pressure (Pa)') #plot pressure data plt2.set_ylabel('Pressrue (Pa)') #label second y axis plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis plt2.legend(loc='upper right') #plot the legend 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]) #Convert first element to floating number and put in temp P = float( dataArray[1]) #Convert second element to floating number and put in P tempF.append(temp) #Build our tempF array by appending temp readings pressure.append(P) #Building our pressure array by appending P readings drawnow(makeFig) #Call drawnow to update our live graph plt.pause(.000001) #Pause Briefly. Important to keep drawnow from crashing cnt=cnt+1 if(cnt>10): #If you have 50 or more points, delete the first one from the array tempF.pop(0) #This allows us to just see the last 50 data points pressure.pop(0)
------------------------------------------------------------------------------
_______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users