Scan simulation

The following script displays two plots being repeatedly updated with arrays of increasing length. Compare the same procedure in pyqtgraph 9.16.2.

The following script simulates a scan

#!/usr/bin/env python
#
# file name: mpl_scan.py
#
import time
import matplotlib.pyplot as plt
import numpy as np

dt = None
ax_dt = None

def display():
    global dt, ax_dt 

    xMin = 0
    xMax = 50
    xDelta = 0.1
    x = np.arange( xMin, xMax, xDelta)
    t = np.tan(x)
    tm = range( len(t))

    plt.ion()
    if not plt.get_fignums():
        fig = plt.figure( 1, figsize = (11.6, 8.2))
    else:
        fig = plt.figure(1)
        fig.clear()

    fig.text( 0.5, 0.95, "A figure containing two plots", va='center', ha='center')

    ax_tan = fig.add_subplot(2, 1, 1)
    ax_tan.grid( True)
    ax_tan.set_autoscale_on( True)
    ax_tan.set_xlabel( 'Phase')
    ax_tan.set_ylabel( 'tan')
    ax_tan.set_title( 'the tan() function')
    tan, = ax_tan.plot( x, t, 'b')
    ax_tan.set_xlim( xmin=x[0], xmax=x[-1])

    ax_dt = fig.add_subplot(212)
    ax_dt.grid( True)
    ax_dt.set_autoscaley_on( True)
    ax_dt.set_xlabel( 'no. of display calls')
    ax_dt.set_ylabel( 'time[s]')
    ax_dt.set_title( 'time to display various lenths of both plots')
    dt, = ax_dt.plot( x, tm, 'r')
    ax_dt.set_xlim( 0, len( x) - 1)

    tm = []
    start = time.time()
    for i in range( 1, len(x)):
        tan.set_data(x[0:i], t[0:i])
        ax_tan.set_ylim( np.min( t[0:i]), np.max( t[0:i]))
        tm.append( time.time() - start)
        start = time.time()
        dt.set_data(range(i), tm[0:i])
        ax_dt.relim()
        ax_dt.autoscale_view(True,False,True)
        fig.canvas.flush_events()
        #plt.pause( 0.01)
        #plt.draw()

if __name__ == "__main__":
    display()

Figure 9.5: matplotlib: scan simulation
\includegraphics[width=20.658cm]{mpl_scan.ps}