Getting data from a figure

Hi there

I have a function where I want to display an image, get the user to
zoom in on a region of interest, and then return the axes limits.

But the problem is, I can only use it once, the second time it gets
called in a script the figure doesn't appear. I know this is to do
with show() not being supposed to be used multiple times, but I don't
know what I should be doing instead ... any tips? (I'm still new to
python btw)

Also, if there's a better (more pythonic way) to do what I'm doing, I
would appreciate your input. I'm not sure if what I'm doing with the
region variable is dodgy or not.

Currently, I'm doing this:

from pylab import *

def getroi(im):
    imshow(im)
    title('Zoom in to region of interest, then press a key')
    region = array([0, 0, 0, 0]) # Placeholder values

    def keypressed(event):
        region[:] = [round(i) for i in gca().axis()]
        close(gcf())

    # Connect keypressed to event handler
    connect('key_press_event', keypressed)

    show()
    return region

thanks,

Richard

···

--
Richard Brown
Ph.D. Candidate
Dept. of Mechanical Engineering
University of Canterbury, NZ

Not sure what region[:] is supposed
to achieve. You are creating a copy with the same name, so you are
over-riding the original variable.

`Hi there

I have a function where I want to display an image, get the user to

zoom in on a region of interest, and then return the axes limits.

But the problem is, I can only use it once, the second time it gets

called in a script the figure doesn’t appear. I know this is to do

with show() not being supposed to be used multiple times, but I don’t

know what I should be doing instead … any tips? (I’m still new to

python btw)

Also, if there’s a better (more pythonic way) to do what I’m doing, I

would appreciate your input. I’m not sure if what I’m doing with the

region variable is dodgy or not.

Currently, I’m doing this:

from pylab import *

def getroi(im):

imshow(im)

title('Zoom in to region of interest, then press a key')

region = array([0, 0, 0, 0]) # Placeholder values

def keypressed(event):

    region[:] = [round(i) for i in gca().axis()]

    close(gcf())

# Connect keypressed to event handler

connect('key_press_event', keypressed)

show()

return region

thanks,

Richard

···

Richard Brown

Ph.D. Candidate

Dept. of Mechanical Engineering

University of Canterbury, NZ


Take Surveys. Earn Cash. Influence the Future of IT

Join SourceForge.net’s Techsay panel and you’ll get the chance to share
your

opinions on IT & business topics through brief surveys-and earn cash

http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV


Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users


This email has been scanned by the MessageLabs Email Security System.

For more information please visit http://www.messagelabs.com/email


`

UNITED GROUP

This email message is the property of United Group. The information in this email is confidential and may be legally privileged. It is intended solely for the addressee. Access to this email by anyone else is unauthorised. If you are not the intended recipient, you may not disclose, copy or distribute this email, nor take or omit to take any action in reliance on it. United Group accepts no liability for any damage caused by this email or any attachments due to viruses, interference, interception, corruption or unauthorised access.

If you have received this email in error, please notify United Group immediately by email to the sender’s email address and delete this document.

Not sure what region[:] is supposed to achieve. You are creating a copy
with the same name, so you are over-riding the original variable.

That doesn't seem to be the case - it returns the right thing on the
first call - i.e. region got changed, but on subsequent calls the
figure is displayed and the function returns array([0,0,0,0]). I
thought taking the slice just gave access to the internals of region
...

How does one assign a new value to a variable in a containing scope?

Richard

···

On 30/03/07, brett.mcsweeney@...1537... <brett.mcsweeney@...1537...> wrote:

Hi there

I have a function where I want to display an image, get the user to
zoom in on a region of interest, and then return the axes limits.

But the problem is, I can only use it once, the second time it gets
called in a script the figure doesn't appear. I know this is to do
with show() not being supposed to be used multiple times, but I don't
know what I should be doing instead ... any tips? (I'm still new to
python btw)

Also, if there's a better (more pythonic way) to do what I'm doing, I
would appreciate your input. I'm not sure if what I'm doing with the
region variable is dodgy or not.

Currently, I'm doing this:

from pylab import *

def getroi(im):
   imshow(im)
   title('Zoom in to region of interest, then press a key')
   region = array([0, 0, 0, 0]) # Placeholder values

   def keypressed(event):
       region[:] = [round(i) for i in gca().axis()]
       close(gcf())

   # Connect keypressed to event handler
   connect('key_press_event', keypressed)

   show()
   return region

thanks,

Richard

You can declare the "region" variable as global in keypressed():

def keypressed(event):
    global region
    region = ...

and "region" does not need to get initialized in the containing scope.

Cheers,

  ~ Antonio

···

On 3/30/07, Richard Brown <rgbrown@...287...> wrote:

On 30/03/07, brett.mcsweeney@...1537... > <brett.mcsweeney@...1537...> wrote:
>
> Not sure what region[:] is supposed to achieve. You are creating a copy
> with the same name, so you are over-riding the original variable.
>

That doesn't seem to be the case - it returns the right thing on the
first call - i.e. region got changed, but on subsequent calls the
figure is displayed and the function returns array([0,0,0,0]). I
thought taking the slice just gave access to the internals of region
...

How does one assign a new value to a variable in a containing scope?