farzad latifeh
farzad latifeh

Reputation: 3

plotting with drawnow in python

I am trying to monitor sensor data in real-time, but the plot shows nothing, below is just an example. can anyone explain to me how come the result is showing nothing?

enter image description here

import datetime
import random
import matplotlib.pyplot as plt
from drawnow import *
from matplotlib.dates import AutoDateLocator, AutoDateFormatter, date2num

i = 0
x = 0
y = 0
FirstTime = str('00:00')
LastTime = str('00:00')

def CreatePlot():
    figure = plt.subplot()
    plt.plot([],[])
    date_datetime = datetime.datetime.strptime(LastTime, '%H:%M')
    int_date = date2num( date_datetime)
    locator = AutoDateLocator()
    figure.xaxis.set_major_locator(locator)
    figure.xaxis.set_major_formatter( AutoDateFormatter(locator) )
    min_date = date2num( datetime.datetime.strptime(FirstTime, '%H:%M') )
    max_date = date2num( datetime.datetime.strptime(LastTime, '%H:%M') )
    plt.xlim(min_date, max_date)
    plt.plot(x,y, 'r-')
    plt.gcf().autofmt_xdate()

while True:
    x = datetime.datetime.now() + datetime.timedelta(minutes=i)
    x = datetime.datetime.strftime(x,'%H:%M')
    if i == 0:
        FirstTime = x
    else:
        LastTime = x
    y = (2*i)+2
    if i>500:
        break
    else:
        drawnow(CreatePlot)
        plt.pause(0.0001)
        i+=1

Upvotes: 0

Views: 533

Answers (1)

farzad latifeh
farzad latifeh

Reputation: 3

I solved the issue, so I am gonna explain it to help someone else like me, the first issue is changing date format to string with strftime, plotting string in x-axis is not auto-formattable, also following commands are redundant:

min_date = date2num( datetime.datetime.strptime(FirstTime, '%H:%M') )
max_date = date2num( datetime.datetime.strptime(LastTime, '%H:%M') )
plt.xlim(min_date, max_date)

in addition, to make a better view someone can add the following commands too:

from matplotlib.ticker import AutoMinorLocator
from matplotlib.dates import AutoDateLocator, AutoDateFormatter
.
.
.
.
ax0 = plt.subplot(2,2,1)
locator = AutoDateLocator()
ax0.xaxis.set_major_locator(locator)
formatter = AutoDateFormatter(locator)
ax0.xaxis.set_major_formatter(formatter)
ax0.xaxis.set_minor_locator(AutoMinorLocator())

Upvotes: 0

Related Questions