Jan-30-2018, 11:19 AM
Hi guys,
I have been trying to plot data in real time from a DHT11 sensor (temperature and humidity) connected with a arduino Uno. I managed to get a code with which I can make one coordinate system with two graphs (see code 1). I also managed to change the code a little bit, so I can make 2 coordinate systems now, with in each plotted one graph (see code 2). The problem with the second code is, when I run it, I get two coordinate systems which overlap each other constantly.
I am working on a project of plotting multiple graphs in different coordinate systems (real time).
code 1:
Thanks in advance.
I have been trying to plot data in real time from a DHT11 sensor (temperature and humidity) connected with a arduino Uno. I managed to get a code with which I can make one coordinate system with two graphs (see code 1). I also managed to change the code a little bit, so I can make 2 coordinate systems now, with in each plotted one graph (see code 2). The problem with the second code is, when I run it, I get two coordinate systems which overlap each other constantly.
I am working on a project of plotting multiple graphs in different coordinate systems (real time).
code 1:
import serial # import Serial Library import numpy # Import numpy import matplotlib.pyplot as plt #import matplotlib library from drawnow import * temperature= [] humidity=[] 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 def makeFig(): #Create a function that makes our desired plot plt.ylim(10,30) #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') #Set ylabels plt.plot(temperature, 'ro-', label='Degrees C') #plot the temperature plt.legend(loc='upper left') #plot the legend plt2=plt.twinx() #Create a second y axis plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data plt2.set_ylabel('Humidity (%)') #label second y axis plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis plt2.legend(loc='upper right')#plot the legend #def makeFig2(): #plt.ylim(0,100) #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('Humidit') #Set ylabels #plt.plot(humidity, 'ro-', label='(%)') #plot the temperature #plt.legend(loc='upper left') #plot the legend #plt2=plt.twinx() #Create a second y axis #plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting #plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data #plt2.set_ylabel('Humidity (%)') #label second y axis #plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis #plt2.legend(loc='upper right')#plot the legend #def makeFig3() : #plt.ylim(0,100) #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('Humidit') #Set ylabels #plt.plot(humidity, 'ro-', label='(%)') #plot the temperature #plt.legend(loc='upper left') #plot the legend #plt2=plt.twinx() #Create a second y axis #plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting #plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data #plt2.set_ylabel('Humidity (%)') #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 hum = float( dataArray[1]) #Convert second element to floating number and put in P temperature.append(temp) #Build our tempF array by appending temp readings humidity.append(hum) #Building our pressure array by appending P readings drawnow(makeFig) #Call drawnow to update our live graph #drawnow(makeFig2) #drawnow(makeFig3) plt.pause(.000001) #Pause Briefly. Important to keep drawnow from crashing cnt=cnt+1code 2:
import serial # import Serial Library import numpy # Import numpy import matplotlib.pyplot as plt #import matplotlib library from drawnow import * temperature= [] humidity=[] 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 def makeFig(): #Create a function that makes our desired plot plt.ylim(10,30) #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') #Set ylabels plt.plot(temperature, 'ro-', label='Degrees C') #plot the temperature plt.legend(loc='upper left') #plot the legend #plt2=plt.twinx() #Create a second y axis #plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting #plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data #plt2.set_ylabel('Humidity (%)') #label second y axis #plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis #plt2.legend(loc='upper right')#plot the legend def makeFig2(): plt.ylim(0,100) #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('Humidit') #Set ylabels plt.plot(humidity, 'ro-', label='(%)') #plot the temperature plt.legend(loc='upper left') #plot the legend #plt2=plt.twinx() #Create a second y axis #plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting #plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data #plt2.set_ylabel('Humidity (%)') #label second y axis #plt2.ticklabel_format(useOffset=False) #Force matplotlib to NOT autoscale y axis #plt2.legend(loc='upper right')#plot the legend #def makeFig3() : #plt.ylim(0,100) #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('Humidit') #Set ylabels #plt.plot(humidity, 'ro-', label='(%)') #plot the temperature #plt.legend(loc='upper left') #plot the legend #plt2=plt.twinx() #Create a second y axis #plt.ylim(0,100) #Set limits of second y axis- adjust to readings you are getting #plt2.plot(humidity, 'go-', label='humdity (%)') #plot pressure data #plt2.set_ylabel('Humidity (%)') #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 hum = float( dataArray[1]) #Convert second element to floating number and put in P temperature.append(temp) #Build our tempF array by appending temp readings humidity.append(hum) #Building our pressure array by appending P readings drawnow(makeFig) #Call drawnow to update our live graph drawnow(makeFig2) #drawnow(makeFig3) plt.pause(.000001) #Pause Briefly. Important to keep drawnow from crashing cnt=cnt+1Can anyone help me with this problem?
Thanks in advance.