Hi,

I have 2 graphs on one figure.
Graph one - subplot(2,1,1)    velocities vs  ( Time or SampleIndex) 
depending in input args
Graph two - subplot(2,1,2)   psd() - power spectrum to help us find the 
resonances in velocities

As system goes through a number of different states, the resonances 
change during the cycle, so I need to zoomIn GraphOne to an area of 
interest, then re-calc the power spectrum on that portion of data only.

I have something that works in the xaxis=SampleIndex scenario, but fails 
in the xaxis=Time scenario, I am wondering if I am going about it the 
right way.

The following page has 4 graphs that show what I have working now (2 
graphs of velocity vs SampleNo), and the failing case (2 graphs of 
Velocity Vs Time)
*http://tinyurl.com/2xpyly
*
I'll describe what I got.

I connected my function RecalcPowerSpectrum  to ReleaseButton event
            pylab.connect( 'button_release_event', RecalcPowerSpectrum)


It's ugly and crude, but if GraphOne is a velocity vs sampleIndex, the 
following works.
My issues start when you look at how I am slicing (if thats the right 
word) the array I pass into psd() and where those values come from.

def RecalcPowerSpectrum( event ): 
    global myAxis
    global lastXstart
    global lastXend

    xlim = myAxis.get_xlim()

    xstart = int(xlim[0])
    xend = int(xlim[1])
   
    if xstart != lastXstart or xend != lastXend:
        print '%s event detected, re-calc power spectrum' % event.name
        lastXstart, lastXend = xstart, xend
        lastXlimits = xlim
        print 'xlim1 =', xstart
        print 'xlim2 =', xend       
        pylab.cla()
        if secondGraph == 'fft':# (plot UDR1 points)
            Fs = 2 * targetvel
            fftdata = pylab.psd(vel[2*xstart:2*xend], NFFT=winsize, 
Fs=Fs, detrend=pylab.mlab.detrend_linear, 
window=pylab.mlab.window_hanning, noverlap=overlap)
        else: #must be a fft2 (plot UDR2 points)
            Fs = targetvel
            fftdata = pylab.psd(combined[xstart:xend], NFFT=winsize, 
Fs=Fs, detrend=pylab.mlab.detrend_linear, 
window=pylab.mlab.window_hanning, noverlap=overlap)


This fails when I run my program to plot with xaxis in time as the 
values returned by get_xlim() are small (0.46408074411240841, 
0.53334652681575301), once I int() these values they are both 0

Clearly I am trying to work with the wrong values. I actually want to 
get the indexes of these values. So I can pass the proper slice of the 
original array into the psd function.


So my questions.
1) Is there a way to get the indexes (not the values) of the portion of 
the line actually showing on screen
2) Is there a way to get a copy of the portion of the data displayed on 
screen (in a new array) ?
3) Is there a better way of linking psd so it performs the spectrum 
analysis only on the portion of data on screen?

*
*Thanks for your help
Steve

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to