Still same with IPython 0.9.1
I will test on Win XP when I get a chance.
Gökhan
On Wed, Apr 22, 2009 at 8:54 AM, Gökhan SEVER <gokhanse...@gmail.com> wrote:
> Huh,
>
> My definition of kill is just like you said.
>
> Inside Ipython print statements output x_new, and y_new values, but no
> context saving :(
>
> Worse thing is python rect.py does not nothing, not even with -d switch :(
> :(
>
> I will try with Ipython 0.9.1.
>
> Gökhan
>
>
>
> On Wed, Apr 22, 2009 at 4:40 AM, Matthias Michler <matthiasmich...@gmx.net
> > wrote:
>
>> Hi Gökhan,
>> Hi list,
>>
>> On Tuesday 21 April 2009 19:44:18 Gökhan SEVER wrote:
>> > 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.
>> With "kill" you mean just closing the figures with button "X", isn't it?
>>
>> What about adding the line
>> print x_new, y_new
>> after the show() in your rect.py-script? Does this give some output in
>> ipython
>> or if you run the script using "python rect.py" ?
>>
>> best regards
>> Matthias
>>
>> > 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