Matthias Michler wrote: > Hi Gökhan, > > On Friday 17 April 2009 20:21:00 Gökhan SEVER wrote: >> Thanks for the pointer Matthias, >> >> That is exactly what I have been looking for.
You might also find useful ideas here: http://currents.soest.hawaii.edu/hg/hgwebdir.cgi/pycurrents/file/2ec7845a90c3/plot/txyzoom.py#l1 I haven't followed this thread closely, but my impression is that what you are trying to do is similar to, but perhaps simpler than, what is done by txyzoom.py. I don't have license info in the file or repo yet, but consider it available under a matplotlib-style license. Eric >> >> I use the code from the RectangleSelector class help with your suggested >> code. I know that I have to update y-axis accordingly to x values such that >> their positions and sizes must much so that I can plot them in a new plot. >> And I know that the answer lies in a mask; I have to create a mask from >> x_new and apply it to y. Do you have any hint on this? > > Unfortunately I'm not familiar with numpy masks, but what I would do is: > > xmin = min(eclick.xdata, erelease.xdata) > xmax = max(eclick.xdata, erelease.xdata) > ymin = min(eclick.ydata, erelease.ydata) > ymax = max(eclick.ydata, erelease.ydata) > # indices inside x-range > indices = (x>= xmin) & (x <= xmax) > # OR: indices for data inside the selected rectangle > #indices = (x>= xmin) & (x <= xmax) & (y>=ymin) & (y<=ymax) > xnew = x[indices] > ynew = y[indices] > >> Another point is do you have any idea how to save values from inside >> onselect action? > > What do you mean by saving? > Saving to disk? > # for ascii format I use: > from scipy.io import write_array > > # for numpy arrays you can use > import numpy as np > a = np.arange(10) > a.tofile # Write array to a file as text or binary. > > and I think there is also some Matplotlib function for this. In the module > matplotlib.mlab, which also allows reading different types of formatted data. > > If you think of saving inside the program. You need a global variable > (statement "global x" at the beginning of onselect) otherwise all variables > are deleted at the end of each onselect call. > >> For some reason my ipython session doesn't remember values after I run the >> given script: > > see three lines above, please. > > best regards Matthias >> from matplotlib.widgets import RectangleSelector >> from pylab import * >> >> def onselect(eclick, erelease): >> # eclick and erelease are matplotlib events at press and release >> print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata) >> print ' endposition : (%f, %f)' % (erelease.xdata, erelease.ydata) >> print ' used button : ', eclick.button >> xmin = min(eclick.xdata, erelease.xdata) >> xmax = max(eclick.xdata, erelease.xdata) >> ymin = min(eclick.ydata, erelease.ydata) >> ymax = max(eclick.ydata, erelease.ydata) >> x_new = x[(x>= xmin) & (x <= xmax)] >> #mask = [x == x_new[i] for i in range(len(x_new))] >> #print mask >> #print len(x_new) >> #print len(y_new) >> #fig_new = figure() >> #plot(x_new, y_new) >> #fig_new.show() >> >> def toggle_selector(event): >> print ' Key pressed.' >> if event.key in ['Q', 'q'] and toggle_selector.RS.active: >> print ' RectangleSelector deactivated.' >> toggle_selector.RS.set_active(False) >> if event.key in ['A', 'a'] and not toggle_selector.RS.active: >> print ' RectangleSelector activated.' >> toggle_selector.RS.set_active(True) >> >> x = arange(100)/(99.0) >> y = sin(x) >> fig = figure >> ax = subplot(111) >> ax.plot(x,y) >> >> toggle_selector.RS = RectangleSelector(ax, onselect, drawtype='box') >> connect('key_press_event', toggle_selector) >> show() >> >> Gökhan >> >> >> On Fri, Apr 17, 2009 at 2:31 AM, Matthias Michler >> >> <matthiasmich...@gmx.net>wrote: >>> Hi Gökhan, >>> >>> I recommend you to use matplotlib.widgets.RectangleSelector instead of >>> the zoom functionality to select the data (An example can be found at >>> http://matplotlib.sourceforge.net/examples/widgets/rectangle_selector.htm >>> l). This will return you the x and y-coordinate of button press and button >>> release >>> event and with that you can take a portion of your data. >>> Something like the following could be a starting point: >>> x_min = min(eclick.xdata, erelease.xdata) >>> x_max = max(eclick.xdata, erelease.xdata) >>> x_new = x[(x>= x_min) & (x <= x_max)] >>> >>> where eclick and erelease correspond to the click and release event of >>> the rectangle selection (see the example below). >>> >>> Opening a new figure after show can be achieved by: >>> >>> fig_new = plt.figure() >>> # some plotting >>> fig_new.show() # show up the new figure >>> >>> >>> best regards Matthias >>> >>> >>> yet another example for the usage of the RectangleSelector copied from >>> its class documentation: >>> >>> """ >>> Select a min/max range of the x axes for a matplotlib Axes >>> >>> Example usage:: >>> >>> from matplotlib.widgets import RectangleSelector >>> from pylab import * >>> >>> def onselect(eclick, erelease): >>> 'eclick and erelease are matplotlib events at press and release' >>> print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata) >>> print ' endposition : (%f, %f)' % (erelease.xdata, >>> erelease.ydata) >>> print ' used button : ', eclick.button >>> >>> def toggle_selector(event): >>> print ' Key pressed.' >>> if event.key in ['Q', 'q'] and toggle_selector.RS.active: >>> print ' RectangleSelector deactivated.' >>> toggle_selector.RS.set_active(False) >>> if event.key in ['A', 'a'] and not toggle_selector.RS.active: >>> print ' RectangleSelector activated.' >>> toggle_selector.RS.set_active(True) >>> >>> x = arange(100)/(99.0) >>> y = sin(x) >>> fig = figure >>> ax = subplot(111) >>> ax.plot(x,y) >>> >>> toggle_selector.RS = RectangleSelector(ax, onselect, >>> drawtype='line') >>> connect('key_press_event', toggle_selector) >>> show() >>> """ >>> >>> On Friday 17 April 2009 02:26:51 Gökhan SEVER wrote: >>>> Hello, >>>> >>>> A quick question: >>>> >>>> I am using two numpy arrays to plot the figure shown in attachment. Is >>>> it possible to get array indices of selected X-axes while using the >>>> zoom function? Later I can create a new figure from this selected >>>> portion instead of the same figure and/or apply an analysis. >>>> >>>> Thank you. >>> ------------------------------------------------------------------------- >>> ----- Stay on top of everything new and different, both inside and >>> around Java (TM) technology - register by April 22, and save >>> $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. >>> 300 plus technical and hands-on sessions. Register today. >>> Use priority code J9JMT32. http://p.sf.net/sfu/p >>> _______________________________________________ >>> Matplotlib-users mailing list >>> Matplotlib-users@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. http://p.sf.net/sfu/p > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ------------------------------------------------------------------------------ Stay on top of everything new and different, both inside and around Java (TM) technology - register by April 22, and save $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. 300 plus technical and hands-on sessions. Register today. Use priority code J9JMT32. http://p.sf.net/sfu/p _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users