Hi,

quick question from a Python noob:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?

Cheers!

Nico

Hi,

quick question from a Python noob:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?

Cheers!

Nico

On Monday 11 January 2010, Nico Schl�mer elucidated thus:

quick question from a Python noob:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?

Python's built-in 'isintance.'

isinstance(var, matplotlib.axes.AxesSubplots)

j

--

Joshua Kugler

Part-Time System Admin/Programmer

http://www.eeinternet.com

PGP Key: http://pgp.mit.edu/ �ID 0x14EA086E

Hm.

print type( gca() )

print gca().__class__

print isinstance( gca(), matplotlib.axes.AxesSubplots)

yields

<class 'matplotlib.axes.AxesSubplot'>

<class 'matplotlib.axes.AxesSubplot'>

Traceback (most recent call last):

File "./testfunctions.py", line 13, in <module>

print isinstance( a, matplotlib.axes.AxesSubplots)

AttributeError: 'module' object has no attribute 'AxesSubplots

?Nico

On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler <joshua@...1552...> wrote:

On Monday 11 January 2010, Nico Schlömer elucidated thus:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?Python's built-in 'isintance.'

isinstance(var, matplotlib.axes.AxesSubplots)

j

--

Joshua Kugler

Part-Time System Admin/Programmer

http://www.eeinternet.com

PGP Key: http://pgp.mit.edu/ ID 0x14EA086E

Hi Nico,

I'm sorry I cannot help you, but at least I'd like to share my findings with

you: I find the following statements to be true:

isinstance(gca(), matplotlib.axes.SubplotBase)

isinstance(gca(), matplotlib.axes.Subplot)

isinstance(gca(), matplotlib.axes.Axes)

but there is no class 'AxesSubplot' in matplotlib.axes. I think this class is

somehow dynamically generated from Axes and Subplot, but I have no idea how

this works.

Kind regards,

Matthias

On Tuesday 12 January 2010 11:40:21 Nico Schlömer wrote:

Hm.

print type( gca() )

print gca().__class__

print isinstance( gca(), matplotlib.axes.AxesSubplots)yields

<class 'matplotlib.axes.AxesSubplot'>

<class 'matplotlib.axes.AxesSubplot'>

Traceback (most recent call last):

File "./testfunctions.py", line 13, in <module>

print isinstance( a, matplotlib.axes.AxesSubplots)

AttributeError: 'module' object has no attribute 'AxesSubplots?Nico

On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler <joshua@...1552...> wrote:

> On Monday 11 January 2010, Nico Schlömer elucidated thus:

>> quick question from a Python noob:

>> Suppose I have an instance of an object of matplotlib, Is there any

>> way to check on its type, e.g., whether it is an instance of

>> matplotlib.axes.AxesSubplots?

>

> Python's built-in 'isintance.'

>

> isinstance(var, matplotlib.axes.AxesSubplots)

>

> j

>

> --

> Joshua Kugler

> Part-Time System Admin/Programmer

> http://www.eeinternet.com

> PGP Key: http://pgp.mit.edu/ ID 0x14EA086E

Hi Nico,

If you're using IPython then you can do a cool trick. Say your your instantiation is called var. You can type:

var?

and it'll spit out some info about the object, including what it's an instance of. If you type

var??

it'll try to print out more detailed information.

Hope that helps.

Regards,

-- Damon

--------------------------

Damon McDougall

Mathematics Institute

University of Warwick

Coventry

CV4 7AL

d.mcdougall@...831...

On 12 Jan 2010, at 10:40, Nico Schlömer wrote:

Hm.

print type( gca() )

print gca().__class__

print isinstance( gca(), matplotlib.axes.AxesSubplots)yields

<class 'matplotlib.axes.AxesSubplot'>

<class 'matplotlib.axes.AxesSubplot'>

Traceback (most recent call last):

File "./testfunctions.py", line 13, in <module>

print isinstance( a, matplotlib.axes.AxesSubplots)

AttributeError: 'module' object has no attribute 'AxesSubplots?Nico

On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler <joshua@...1552...> wrote:

On Monday 11 January 2010, Nico Schlömer elucidated thus:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?Python's built-in 'isintance.'

isinstance(var, matplotlib.axes.AxesSubplots)

j

--

Joshua Kugler

Part-Time System Admin/Programmer

http://www.eeinternet.com

PGP Key: http://pgp.mit.edu/ ID 0x14EA086E------------------------------------------------------------------------------

This SF.Net email is sponsored by the Verizon Developer Community

Take advantage of Verizon's best-in-class app development support

A streamlined, 14 day to market process makes app distribution fast and easy

Join now and get one step closer to millions of Verizon customers

http://p.sf.net/sfu/verizon-dev2dev

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

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

Well, I guess that's good enough for me.

It's a bit unfortunate that the type() function wouldn't spit out this

information, though. When for example iterating through the output of

get_children() (iterating through a list of objects of unknown classes

that is), would there be any other way (function, method?) to get more

info on the matplotlib object?

Cheers,

Nico

On Tue, Jan 12, 2010 at 12:01 PM, Matthias Michler <MatthiasMichler@...361...> wrote:

Hi Nico,

I'm sorry I cannot help you, but at least I'd like to share my findings with

you: I find the following statements to be true:

isinstance(gca(), matplotlib.axes.SubplotBase)

isinstance(gca(), matplotlib.axes.Subplot)

isinstance(gca(), matplotlib.axes.Axes)

but there is no class 'AxesSubplot' in matplotlib.axes. I think this class is

somehow dynamically generated from Axes and Subplot, but I have no idea how

this works.Kind regards,

MatthiasOn Tuesday 12 January 2010 11:40:21 Nico Schlömer wrote:

Hm.

print type( gca() )

print gca().__class__

print isinstance( gca(), matplotlib.axes.AxesSubplots)yields

<class 'matplotlib.axes.AxesSubplot'>

Traceback (most recent call last):

File "./testfunctions.py", line 13, in <module>

print isinstance( a, matplotlib.axes.AxesSubplots)

AttributeError: 'module' object has no attribute 'AxesSubplots?Nico

On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler <joshua@...1552...> > wrote:

> On Monday 11 January 2010, Nico Schlömer elucidated thus:

>> quick question from a Python noob:

>> Suppose I have an instance of an object of matplotlib, Is there any

>> way to check on its type, e.g., whether it is an instance of

>> matplotlib.axes.AxesSubplots?

>

> Python's built-in 'isintance.'

>

> isinstance(var, matplotlib.axes.AxesSubplots)

>

> j

>

> --

> Joshua Kugler

> Part-Time System Admin/Programmer

> http://www.eeinternet.com

> PGP Key: http://pgp.mit.edu/ ID 0x14EA086E------------------------------------------------------------------------------

This SF.Net email is sponsored by the Verizon Developer Community

Take advantage of Verizon's best-in-class app development support

A streamlined, 14 day to market process makes app distribution fast and easy

Join now and get one step closer to millions of Verizon customers

http://p.sf.net/sfu/verizon-dev2dev

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

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

Hi Nico,

Well, I guess that's good enough for me.

Just to share my knowlegde with you: I found

In [18]: matplotlib.axes.Subplot.__bases__

Out[18]:

(<class matplotlib.axes.SubplotBase at 0x8a1f6bc>,

<class 'matplotlib.axes.Axes'>)

That is the class 'matplotlib.axes.Subplot' was inherited from SubplotBase and

Axes. I think the name 'AxesSubplot' belongs to the class object 'Subplot',

which is dynamically generated in the axes.py and includes the name of

the 'mother': namely 'Axes' (see also function 'subplot_class_factory' at the

end of matplotlib/axes.py).

It's a bit unfortunate that the type() function wouldn't spit out this

information, though. When for example iterating through the output of

get_children() (iterating through a list of objects of unknown classes

that is), would there be any other way (function, method?) to get more

info on the matplotlib object?

I think type just uses the '__name__' of the class, which is in most cases

really the name of the class, but I think for Subplot-instances this is a bit

more involved because of the internal structure of matplotlib.

In[11]: matplotlib.axes.Subplot.__name__

Out[11]: 'AxesSubplot'

I would expect that the case of the Subplot-objects is somehow singular and

all other mpl-objects can be classified using type and isinstance, but I'm

not an mpl-expert and maybe there are more special cases.

Kind regards,

Matthias

On Tuesday 12 January 2010 12:26:01 Nico Schlömer wrote:

On Tue, Jan 12, 2010 at 12:01 PM, Matthias Michler > > <MatthiasMichler@...361...> wrote:

> Hi Nico,

>

> I'm sorry I cannot help you, but at least I'd like to share my findings

> with you: I find the following statements to be true:

> isinstance(gca(), matplotlib.axes.SubplotBase)

> isinstance(gca(), matplotlib.axes.Subplot)

> isinstance(gca(), matplotlib.axes.Axes)

> but there is no class 'AxesSubplot' in matplotlib.axes. I think this

> class is somehow dynamically generated from Axes and Subplot, but I have

> no idea how this works.

>

> Kind regards,

> Matthias

>

> On Tuesday 12 January 2010 11:40:21 Nico Schlömer wrote:

>> Hm.

>>

>> print type( gca() )

>> print gca().__class__

>> print isinstance( gca(), matplotlib.axes.AxesSubplots)

>>

>> yields

>>

>> <class 'matplotlib.axes.AxesSubplot'>

>> <class 'matplotlib.axes.AxesSubplot'>

>> Traceback (most recent call last):

>> File "./testfunctions.py", line 13, in <module>

>> print isinstance( a, matplotlib.axes.AxesSubplots)

>> AttributeError: 'module' object has no attribute 'AxesSubplots

>>

>> ?Nico

>>

>> On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler > >> <joshua@...1552...> > > > > wrote:

>> > On Monday 11 January 2010, Nico Schlömer elucidated thus:

>> >> quick question from a Python noob:

>> >> Suppose I have an instance of an object of matplotlib, Is there any

>> >> way to check on its type, e.g., whether it is an instance of

>> >> matplotlib.axes.AxesSubplots?

>> >

>> > Python's built-in 'isintance.'

>> >

>> > isinstance(var, matplotlib.axes.AxesSubplots)

>> >

>> > j

>> >

>> > --

>> > Joshua Kugler

>> > Part-Time System Admin/Programmer

>> > http://www.eeinternet.com

>> > PGP Key: http://pgp.mit.edu/ ID 0x14EA086E

>

> -------------------------------------------------------------------------

>----- This SF.Net email is sponsored by the Verizon Developer Community

> Take advantage of Verizon's best-in-class app development support A

> streamlined, 14 day to market process makes app distribution fast and

> easy Join now and get one step closer to millions of Verizon customers

> http://p.sf.net/sfu/verizon-dev2dev

> _______________________________________________

> Matplotlib-users mailing list

> Matplotlib-users@lists.sourceforge.net

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

Matthias Michler wrote:

I would expect that the case of the Subplot-objects is somehow singular and all other mpl-objects can be classified using type and isinstance, but I'm not an mpl-expert and maybe there are more special cases.

Yes. This weirdness came about because Subplot used to contain functionality for both the projections (how data is projected, ticked etc.) and positioning within the figure. Around 0.91, these two things were separated out so that writing a new projection (eg. polar axes) didn't require reimplementing the subplot infrastructure. The Subplot class was kept around as an alias for AxesSubplot (a dynamically generated class) backward compatibility.

As for not being able to do "isinstance(gca(), matplotlib.axes.SubplotAxes)" -- I'm not sure that's a problem. It would help to understand the use case, but I suspect you either want "isinstance(gca(), matplotlib.axes.Axes)" or "isinstance(gca(), matplotlib.axes.SubplotBase)".

Mike

Kind regards,

MatthiasOn Tue, Jan 12, 2010 at 12:01 PM, Matthias Michler >> >> <MatthiasMichler@...361...> wrote:

Hi Nico,

I'm sorry I cannot help you, but at least I'd like to share my findings

with you: I find the following statements to be true:

isinstance(gca(), matplotlib.axes.SubplotBase)

isinstance(gca(), matplotlib.axes.Subplot)

isinstance(gca(), matplotlib.axes.Axes)

but there is no class 'AxesSubplot' in matplotlib.axes. I think this

class is somehow dynamically generated from Axes and Subplot, but I have

no idea how this works.Kind regards,

MatthiasOn Tuesday 12 January 2010 11:40:21 Nico Schl�mer wrote:

Hm.

print type( gca() )

print gca().__class__

print isinstance( gca(), matplotlib.axes.AxesSubplots)yields

<class 'matplotlib.axes.AxesSubplot'>

Traceback (most recent call last):

File "./testfunctions.py", line 13, in <module>

print isinstance( a, matplotlib.axes.AxesSubplots)

AttributeError: 'module' object has no attribute 'AxesSubplots?Nico

On Tue, Jan 12, 2010 at 6:45 AM, Joshua J. Kugler >>>> <joshua@...1552...> >>>> >>> wrote:

On Monday 11 January 2010, Nico Schl�mer elucidated thus:

Suppose I have an instance of an object of matplotlib, Is there any

way to check on its type, e.g., whether it is an instance of

matplotlib.axes.AxesSubplots?

Python's built-in 'isintance.'

isinstance(var, matplotlib.axes.AxesSubplots)

j

--

Joshua Kugler

Part-Time System Admin/Programmer

http://www.eeinternet.com

PGP Key: http://pgp.mit.edu/ ID 0x14EA086E

-------------------------------------------------------------------------

----- This SF.Net email is sponsored by the Verizon Developer Community

Take advantage of Verizon's best-in-class app development support A

streamlined, 14 day to market process makes app distribution fast and

easy Join now and get one step closer to millions of Verizon customers

http://p.sf.net/sfu/verizon-dev2dev

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

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

------------------------------------------------------------------------------

This SF.Net email is sponsored by the Verizon Developer Community

Take advantage of Verizon's best-in-class app development support

A streamlined, 14 day to market process makes app distribution fast and easy

Join now and get one step closer to millions of Verizon customers

http://p.sf.net/sfu/verizon-dev2dev _______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

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

--

Michael Droettboom

Science Software Branch

Operations and Engineering Division

Space Telescope Science Institute

Operated by AURA for NASA

As for not being able to do "isinstance(gca(), matplotlib.axes.SubplotAxes)" -- I'm not sure that's a problem. It would help to understand the use case, but I suspect you either want "isinstance(gca(), matplotlib.axes.Axes)" or "isinstance(gca(), matplotlib.axes.SubplotBase)".

You may also want to use:

issubclass(an_appropriate_superclass)

instead.

However, given the python's duck-typing semantics, you usually don't need to know exactly what class something is -- that's kind of the point of dynamic typing.

So what is it you're trying to accomplish? Maybe there is a better way.

-Chris

--

Christopher Barker, Ph.D.

Oceanographer

Emergency Response Division

NOAA/NOS/OR&R (206) 526-6959 voice

7600 Sand Point Way NE (206) 526-6329 fax

Seattle, WA 98115 (206) 526-6317 main reception

Chris.Barker@...259...

So what is it you're trying to accomplish? Maybe there is a better way.

Well, I'm recursively iterating through the children of all objects,

starting at gcf() (and then picking up gca(), lines, axes, everything

that belongs to the plot), which is then parsed and a TikZ file is

spit out. I need the type-checking exactly when I loop through the

children of an object to be able to say "Now we have an axes object,

plot axes.".

I'm a total Python noob, so my first attempts at an implementation is

likely quite shabby:

You'll find handle_children() towards the bottom of the file.

Would the type-checking as applied in there be something sensitive to

do? Also, of course, hints of *all kinds very much appreciated!

Cheers,

Nico