Hi Matthias,

Thanks for your reply again. Unfortunately I can't read x_new or y_new after
I kill the figures (nor when they are active). I don't know what exactly
wrong in my configuration or IPython. I use IPython 0.10.bzr.r1163 on Fedora
10.

Hopefully, I will solve the masked array riddle by reading more (although
haven't seen a specific example similar to my question on the numpy
reference pages), if not getting some insight from a numpy expert or like
you said from an expert on masked arrays :)

Have a good Tuesday to all.

Gökhan


On Tue, Apr 21, 2009 at 3:21 AM, Matthias Michler
<matthiasmich...@gmx.net>wrote:

> Hi Gökhan,
> Hi list,
> Hi experts on masked arrays,
>
> I run the attached script (copied from your last two emails) and I can use
> x_new, y_new after closing the figures (where x_new and y_new are the
> values
> selected in the last selection).
>
> I don't know, what is going wrong with your script on your system.
>
> ### my output ##########################
> In [1]: run rect.py
>  startposition : (0.276210, 0.592969)
>  endposition   : (0.542339, 0.309375)
>  used button   :  1
>  startposition : (0.745968, 0.747656)
>  endposition   : (0.745968, 0.747656)
>  used button   :  1
>  startposition : (0.645161, 0.761719)
>  endposition   : (0.806452, 0.609375)
>  used button   :  3
>  startposition : (0.808468, 0.607031)
>  endposition   : (0.808468, 0.604688)
>  used button   :  3
>  startposition : (0.086694, 0.166406)
>  endposition   : (0.137097, 0.070313)
>  used button   :  1
>  startposition : (0.921371, 0.850781)
>  endposition   : (0.987903, 0.728906)
>  used button   :  1
>
> In [2]: x_new
> Out[2]:
> array([ 0.92929293,  0.93939394,  0.94949495,  0.95959596,  0.96969697,
>        0.97979798])
>
> In [3]: y_new
> Out[3]:
> array([ 0.80119703,  0.8072005 ,  0.81312162,  0.81895978,  0.82471437,
>        0.83038482])
>
> In [4]:
> #############
>
> Please see my comments below.
>
> On Monday 20 April 2009 23:16:37 Gökhan SEVER wrote:
> > Thanks for elegant trick Matthias.
> >
> > I have modified onselect function following your suggestions, and it is
> > working as I wanted it to be. Select a portion and get a zoomed view in a
> > new figure.
> >
> > def onselect(eclick, erelease):
> >     # eclick and erelease are matplotlib events at press and release
> >     global x_new
> >     global y_new
> >     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)
> >     indices = (x >= xmin) & (x <= xmax) & (y >= ymin) & (y <= ymax)
> >     x_new = x[indices]
> >     y_new = y[indices]
> >     fig_new = figure()
> >     plot(x_new, y_new)
> >     fig_new.show()
> >
> > There is still a minute point, that I would like mention again. Even
> though
> > I used global style variables I can't still see them when I quit the
> > program.
> >
> > What I do is run the file within IPython by run command. In my case the
> > file is 'rect.py.' and I do run rect.py. When I quit and do whos querry,
> I
> > can't see global x_new nor y_new at the resulting lines:
> >
> > In [13]: whos
> > Variable            Type           Data/Info
> > --------------------------------------------
> > RectangleSelector   classobj       matplotlib.widgets.RectangleSelector
> > ax                  AxesSubplot    Axes(0.125,0.1;0.775x0.8)
> > fig                 function       <function figure at 0xa752c6c>
> > onselect            function       <function onselect at 0xac0ec34>
> > toggle_selector     function       <function toggle_selector at
> 0xac0ef0c>
> > x                   ndarray        100: 100 elems, type `float64`, 800
> > bytes y                   ndarray        100: 100 elems, type `float64`,
> > 800 bytes
> >
> >
> > For the masking, I was planning to use a masking scheme as given below.
> Let
> > say I have an array which "a"
> >
> > In [14]: a = arange(5)
> >
> > In [15]: a
> > Out[15]: array([0, 1, 2, 3, 4])
> >
> > and my secondary array is "b"
> >
> > In [16]: b = array([2,3])
> >
> > What I want to do is to mask a with b values and get an array of:
> >
> > [array([False, False, True, True,  False], dtype=bool)]
> >
> > That is just an manually created array. I still don't know how to do this
> > programmatically in Pythonic fashion.
>
> As I mentioned before I'm not familiar with numpys masked arrays. In this
> list
> I read several comments on them, but I never used them. But I think they
> are
> what you are after. Maybe someone else can give you a hint or you try
> numpys
> online documentation.
> All I could provide is again a little manually work using a for-loop. So
> something like
>
> mask = zeros(len(a), dtype=bool)
> for index in xrange(len(a)):        # run through array a
>    if a[index] in b:
>        mask[index] = True
> print mask      # gives array([False, False,  True,  True, False],
> dtype=bool)
>
> Furthermore I'm not a Python expert and therefore I'm not the guy to ask
> for
> programing in "Pythonic fashion". Maybe some else can give a comment?
>
> best regards Matthias
>
> > Again thanks for your help.
> >
> > Gökhan
> >
> >
> > On Mon, Apr 20, 2009 at 4:09 AM, Matthias Michler
> >
> > <matthiasmich...@gmx.net>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.
> > > >
> > > > 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
>
>
------------------------------------------------------------------------------
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

Reply via email to