From: <lee...@us...> - 2009-01-26 16:39:20
|
Revision: 6829 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6829&view=rev Author: leejjoon Date: 2009-01-26 16:39:14 +0000 (Mon, 26 Jan 2009) Log Message: ----------- Improved tight bbox option of the savefig Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/figure.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009-01-26 14:40:09 UTC (rev 6828) +++ trunk/matplotlib/CHANGELOG 2009-01-26 16:39:14 UTC (rev 6829) @@ -1,3 +1,5 @@ +2009-01-26 Improved tight bbox option of the savefig. - JJL + 2009-01-26 Make curves and NaNs play nice together - MGD 2009-01-21 Changed the defaults of acorr and xcorr to use Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2009-01-26 14:40:09 UTC (rev 6828) +++ trunk/matplotlib/lib/matplotlib/axes.py 2009-01-26 16:39:14 UTC (rev 6829) @@ -7377,6 +7377,40 @@ integer=True)) return im + + def get_tightbbox(self, renderer): + """ + return the tight bounding box of the axes. + The dimension of the Bbox in canvas coordinate. + """ + + artists = [] + bb = [] + + artists.append(self) + + if self.title.get_visible(): + artists.append(self.title) + + if self.xaxis.get_visible(): + artists.append(self.xaxis.label) + bbx1, bbx2 = self.xaxis.get_ticklabel_extents(renderer) + bb.extend([bbx1, bbx2]) + if self.yaxis.get_visible(): + artists.append(self.yaxis.label) + bby1, bby2 = self.yaxis.get_ticklabel_extents(renderer) + bb.extend([bby1, bby2]) + + + bb.extend([c.get_window_extent(renderer) for c in artists]) + + _bbox = mtransforms.Bbox.union([b for b in bb if b.width!=0 or b.height!=0]) + + return _bbox + + + + class SubplotBase: """ Base class for subplots, which are :class:`Axes` instances with @@ -7514,6 +7548,8 @@ for label in self.get_yticklabels(): label.set_visible(firstcol) + + _subplot_classes = {} def subplot_class_factory(axes_class=None): # This makes a new class that inherits from SubclassBase and the Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2009-01-26 14:40:09 UTC (rev 6828) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2009-01-26 16:39:14 UTC (rev 6829) @@ -1479,7 +1479,25 @@ origBboxInches = fig.bbox_inches _boxout = fig.transFigure._boxout + asp_list = [] + locator_list = [] + for ax in fig.axes: + pos = ax.get_position(original=False).frozen() + locator_list.append(ax.get_axes_locator()) + asp_list.append(ax.get_aspect()) + + def _l(a, r, pos=pos): return pos + ax.set_axes_locator(_l) + ax.set_aspect("auto") + + + def restore_bbox(): + + for ax, asp, loc in zip(fig.axes, asp_list, locator_list): + ax.set_aspect(asp) + ax.set_axes_locator(loc) + fig.bbox = origBbox fig.bbox_inches = origBboxInches fig.transFigure._boxout = _boxout Modified: trunk/matplotlib/lib/matplotlib/figure.py =================================================================== --- trunk/matplotlib/lib/matplotlib/figure.py 2009-01-26 14:40:09 UTC (rev 6828) +++ trunk/matplotlib/lib/matplotlib/figure.py 2009-01-26 16:39:14 UTC (rev 6829) @@ -1111,23 +1111,11 @@ ticklabels. Needs improvement. """ - artists = [] bb = [] for ax in self.axes: + if ax.get_visible(): + bb.append(ax.get_tightbbox(renderer)) - artists.append(ax.xaxis.label) - artists.append(ax.yaxis.label) - artists.append(ax.title) - artists.append(ax) - - bbx1, bbx2 = ax.xaxis.get_ticklabel_extents(renderer) - bby1, bby2 = ax.yaxis.get_ticklabel_extents(renderer) - bb.extend([bbx1, bbx2, bby1, bby2]) - - - bb.extend([c.get_window_extent(renderer) for c in artists \ - if c.get_visible()]) - _bbox = Bbox.union([b for b in bb if b.width!=0 or b.height!=0]) bbox_inches = TransformedBbox(_bbox, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |