From: <ef...@us...> - 2008-10-24 06:51:38
|
Revision: 6316 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6316&view=rev Author: efiring Date: 2008-10-24 06:51:29 +0000 (Fri, 24 Oct 2008) Log Message: ----------- Make shared axes work better with constrained aspect ratio. This is restricted to the case of adjustable=datalim, and is experimental. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2008-10-24 00:08:58 UTC (rev 6315) +++ trunk/matplotlib/lib/matplotlib/axes.py 2008-10-24 06:51:29 UTC (rev 6316) @@ -499,15 +499,24 @@ self._originalPosition = self._position.frozen() self.set_axes(self) self.set_aspect('auto') - self.set_adjustable('box') + self._adjustable = 'box' self.set_anchor('C') self._sharex = sharex self._sharey = sharey if sharex is not None: self._shared_x_axes.join(self, sharex) + if sharex._adjustable == 'box': + sharex._adjustable = 'datalim' + #warnings.warn( + # 'shared axes: "adjustable" is being changed to "datalim"') + self._adjustable = 'datalim' if sharey is not None: self._shared_y_axes.join(self, sharey) - + if sharex._adjustable == 'box': + sharex._adjustable = 'datalim' + #warnings.warn( + # 'shared axes: "adjustable" is being changed to "datalim"') + self._adjustable = 'datalim' self.set_label(label) self.set_figure(fig) @@ -772,6 +781,11 @@ if which in ('both', 'original'): self._originalPosition.set(pos) + def reset_position(self): + 'Make the original position the active position' + pos = self.get_position(original=True) + self.set_position(pos, which='active') + def _set_artist_props(self, a): 'set the boilerplate props for artists added to axes' a.set_figure(self.figure) @@ -992,6 +1006,10 @@ ACCEPTS: [ 'box' | 'datalim' ] """ if adjustable in ('box', 'datalim'): + if self in self._shared_x_axes or self in self._shared_y_axes: + if adjustable == 'box': + raise ValueError( + 'adjustable must be "datalim" for shared axes') self._adjustable = adjustable else: raise ValueError('argument must be "box", or "datalim"') @@ -1043,11 +1061,11 @@ axes box or the view limits. ''' if position is None: - position = self.get_position(True) + position = self.get_position(original=True) aspect = self.get_aspect() if aspect == 'auto': - self.set_position( position , 'active') + self.set_position( position , which='active') return if aspect == 'equal': @@ -1058,7 +1076,10 @@ #Ensure at drawing time that any Axes involved in axis-sharing # does not have its position changed. if self in self._shared_x_axes or self in self._shared_y_axes: - self._adjustable = 'datalim' + if self._adjustable == 'box': + self._adjustable = 'datalim' + warnings.warn( + 'shared axes: "adjustable" is being changed to "datalim"') figW,figH = self.get_figure().get_size_inches() fig_aspect = figH/figW @@ -1069,6 +1090,10 @@ self.set_position(pb1.anchored(self.get_anchor(), pb), 'active') return + # reset active to original in case it had been changed + # by prior use of 'box' + self.set_position(position, which='active') + xmin,xmax = self.get_xbound() xsize = max(math.fabs(xmax-xmin), 1e-30) ymin,ymax = self.get_ybound() @@ -1489,7 +1514,7 @@ if not self.get_visible(): return renderer.open_group('axes') - self.apply_aspect(self.get_position(True)) + self.apply_aspect() # the patch draws the background rectangle -- the frame below # will draw the edges This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |