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