Hi everybody, I try to play with "sharex" feature. Then, I have been guided to the class "Grouper" of module cbook: http://matplotlib.sourceforge.net/api/cbook_api.html So I tried the following example: ############################## from matplotlib.cbook import * g = Grouper() g.join('a', 'b') ############################## I obtain: Traceback (most recent call last): File "test_grouper.py", line 4, in <module> g.join('a', 'b') File ".../matplotlib/cbook.py", line 1118, in join set_a = mapping.setdefault(ref(a), [ref(a)]) TypeError: cannot create weak reference to 'str' object What is the problem? Thanks in advance, Julien -- python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.\ 9&1+,\'Z4(55l4('])" "When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong." (first law of AC Clarke)
TP wrote: > Hi everybody, > > I try to play with "sharex" feature. Then, I have been guided to the > class "Grouper" of module cbook: > > http://matplotlib.sourceforge.net/api/cbook_api.html > > So I tried the following example: > > ############################## > from matplotlib.cbook import * > > g = Grouper() > g.join('a', 'b') > ############################## > > I obtain: > > Traceback (most recent call last): > File "test_grouper.py", line 4, in <module> > g.join('a', 'b') > File ".../matplotlib/cbook.py", line 1118, in join > set_a = mapping.setdefault(ref(a), [ref(a)]) > TypeError: cannot create weak reference to 'str' object > > What is the problem? Grouper is implemented using weak references, which are supported only for some types of objects, as described here: http://docs.python.org/library/weakref.html Evidently the cbook Grouper docstring was written when the implementation was different, and did not use weakref. So, you have found a major bug in the docstring. Eric > > Thanks in advance, > > Julien >
Yes -- I'll update the docstring. The weakref support was added afterward during one of my many memory leak crusades ;) What were you attempting to do with the Grouper? You shouldn't have to use the class directly to use the sharex/sharey functionality -- it's only an implementation detail. Mike Eric Firing wrote: > TP wrote: > >> Hi everybody, >> >> I try to play with "sharex" feature. Then, I have been guided to the >> class "Grouper" of module cbook: >> >> http://matplotlib.sourceforge.net/api/cbook_api.html >> >> So I tried the following example: >> >> ############################## >> from matplotlib.cbook import * >> >> g = Grouper() >> g.join('a', 'b') >> ############################## >> >> I obtain: >> >> Traceback (most recent call last): >> File "test_grouper.py", line 4, in <module> >> g.join('a', 'b') >> File ".../matplotlib/cbook.py", line 1118, in join >> set_a = mapping.setdefault(ref(a), [ref(a)]) >> TypeError: cannot create weak reference to 'str' object >> >> What is the problem? >> > > Grouper is implemented using weak references, which are supported only > for some types of objects, as described here: > http://docs.python.org/library/weakref.html > > Evidently the cbook Grouper docstring was written when the > implementation was different, and did not use weakref. So, you have > found a major bug in the docstring. > > Eric > > >> Thanks in advance, >> >> Julien >> >> > > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry® Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9-12, 2009. Register now! > http://p.sf.net/sfu/devconf > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > 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
Michael Droettboom wrote: > Yes -- I'll update the docstring. The weakref support was added > afterward during one of my many memory leak crusades ;) > > What were you attempting to do with the Grouper? You shouldn't have to > use the class directly to use the sharex/sharey functionality -- it's > only an implementation detail. I have not found any way to share an axis after the creation of the subplot/axis. That is why I use the "join" method of a Grouper after the subplot/axis has been created. But I would need also a means to "unjoin" the subplots. Is it possible? Thanks Julien -- python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.\ 9&1+,\'Z4(55l4('])" "When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong." (first law of AC Clarke)
You can use the twinx/twiny methods to join two axes after they've been created. I don't think we currently provide a way to unjoin the subplots (either in the axes or in the Grouper class itself.) I think that's functionality we would need to add. If you can be so kind as to add a feature request to the tracker, it won't get lost. Mike TP wrote: > Michael Droettboom wrote: > > >> Yes -- I'll update the docstring. The weakref support was added >> afterward during one of my many memory leak crusades ;) >> >> What were you attempting to do with the Grouper? You shouldn't have to >> use the class directly to use the sharex/sharey functionality -- it's >> only an implementation detail. >> > > I have not found any way to share an axis after the creation of the > subplot/axis. That is why I use the "join" method of a Grouper after the > subplot/axis has been created. But I would need also a means to "unjoin" > the subplots. Is it possible? > > Thanks > > Julien > > -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
Michael Droettboom wrote: > You can use the twinx/twiny methods to join two axes after they've been > created. > > I don't think we currently provide a way to unjoin the subplots (either > in the axes or in the Grouper class itself.) I think that's > functionality we would need to add. If you can be so kind as to add a > feature request to the tracker, it won't get lost. It is done! Thanks Julien -- python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.\ 9&1+,\'Z4(55l4('])" "When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong." (first law of AC Clarke)