From: <lee...@us...> - 2009-04-18 16:02:57
|
Revision: 7052 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7052&view=rev Author: leejjoon Date: 2009-04-18 16:02:56 +0000 (Sat, 18 Apr 2009) Log Message: ----------- offsetbox minor update Modified Paths: -------------- trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py trunk/matplotlib/lib/matplotlib/offsetbox.py trunk/matplotlib/lib/mpl_toolkits/axes_grid/anchored_artists.py Removed Paths: ------------- trunk/matplotlib/examples/pylab_examples/axes_divider.py trunk/matplotlib/examples/pylab_examples/axes_grid.py Modified: trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py =================================================================== --- trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py 2009-04-17 20:40:58 UTC (rev 7051) +++ trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py 2009-04-18 16:02:56 UTC (rev 7052) @@ -11,7 +11,8 @@ at2 = AnchoredText("Figure 1(b)", loc=3, prop=dict(size=8), frameon=True, - bbox_to_anchor=(0., 1.) + bbox_to_anchor=(0., 1.), + bbox_transform=ax.transAxes ) at2.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") ax.add_artist(at2) Deleted: trunk/matplotlib/examples/pylab_examples/axes_divider.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/axes_divider.py 2009-04-17 20:40:58 UTC (rev 7051) +++ trunk/matplotlib/examples/pylab_examples/axes_divider.py 2009-04-18 16:02:56 UTC (rev 7052) @@ -1,674 +0,0 @@ - -import matplotlib.axes as maxes -import matplotlib.transforms as mtransforms - -import matplotlib.cbook as cbook - -import new - - -class Size(object): - - @classmethod - def from_any(self, size, fraction_ref=None): - if cbook.is_numlike(size): - return Size.Fixed(size) - elif cbook.is_string_like(size): - if size[-1] == "%": - return Size.Fraction(fraction_ref, float(size[:-1])/100.) - - raise ValueError("") - - - - class _Base(object): - pass - - class Fixed(_Base): - def __init__(self, fixed_size): - self._fixed_size = fixed_size - - def get_size(self, renderer): - rel_size = 0. - abs_size = self._fixed_size - return rel_size, abs_size - - class Scalable(_Base): - def __init__(self, scalable_size): - self._scalable_size = scalable_size - - def get_size(self, renderer): - rel_size = self._scalable_size - abs_size = 0. - return rel_size, abs_size - - - class AxesX(_Base): - def __init__(self, axes, aspect=1.): - self._axes = axes - self._aspect = aspect - - def get_size(self, renderer): - l1, l2 = self._axes.get_xlim() - rel_size = abs(l2-l1)*self._aspect - abs_size = 0. - return rel_size, abs_size - - class AxesY(_Base): - def __init__(self, axes, aspect=1.): - self._axes = axes - self._aspect = aspect - - def get_size(self, renderer): - l1, l2 = self._axes.get_ylim() - rel_size = abs(l2-l1)*self._aspect - abs_size = 0. - return rel_size, abs_size - - - class MaxExtent(_Base): - def __init__(self, artist_list, w_or_h): - self._artist_list = artist_list - - if w_or_h not in ["width", "height"]: - raise ValueError() - - self._w_or_h = w_or_h - - def add_artist(self, a): - self._artist_list.append(a) - - def get_size(self, renderer): - rel_size = 0. - w_list, h_list = [], [] - for a in self._artist_list: - bb = a.get_window_extent(renderer) - w_list.append(bb.width) - h_list.append(bb.height) - dpi = a.get_figure().get_dpi() - if self._w_or_h == "width": - abs_size = max(w_list)/dpi - elif self._w_or_h == "height": - abs_size = max(h_list)/dpi - - return rel_size, abs_size - - class Fraction(_Base): - def __init__(self, size, fraction): - self._size = size - self._fraction = fraction - - def get_size(self, renderer): - r, a = self._size.get_size(renderer) - rel_size = r*self._fraction - abs_size = a*self._fraction - return rel_size, abs_size - - class Padded(_Base): - def __init__(self, size, pad): - self._size = size - self._pad = pad - - def get_size(self, renderer): - r, a = self._size.get_size(renderer) - rel_size = r - abs_size = a + self._pad - return rel_size, abs_size - - - -class AxesLocator(object): - def __init__(self, axes_divider, nx, ny, nx1=None, ny1=None): - - self._axes_divider = axes_divider - - _xrefindex = axes_divider._xrefindex - _yrefindex = axes_divider._yrefindex - - self._nx, self._ny = nx - _xrefindex, ny - _yrefindex - - if nx1 is None: - nx1 = nx+1 - if ny1 is None: - ny1 = ny+1 - - self._nx1 = nx1 - _xrefindex - self._ny1 = ny1 - _yrefindex - - - def __call__(self, axes, renderer): - - _xrefindex = self._axes_divider._xrefindex - _yrefindex = self._axes_divider._yrefindex - - return self._axes_divider.locate(self._nx + _xrefindex, self._ny + _yrefindex, - self._nx1 + _xrefindex, self._ny1 + _yrefindex, - renderer) - - -class Divider(object): - - def __init__(self, fig, pos, horizontal, vertical, aspect=None, anchor="C"): - self._fig = fig - self._pos = pos - self._horizontal = horizontal - self._vertical = vertical - self._anchor = anchor - self._aspect = aspect - self._xrefindex = 0 - self._yrefindex = 0 - - - @staticmethod - def _calc_k(l, total_size, renderer): - - rs_sum, as_sum = 0., 0. - - for s in l: - rs, as = s.get_size(renderer) - rs_sum += rs - as_sum += as - - if rs_sum != 0.: - k = (total_size - as_sum) / rs_sum - return k - else: - return 0. - - - @staticmethod - def _calc_offsets(l, k, renderer): - - offsets = [0.] - - for s in l: - rs, as = s.get_size(renderer) - offsets.append(offsets[-1] + rs*k + as) - - return offsets - - - def set_position(self, pos): - self._pos = pos - - def get_position(self): - return self._pos - - def set_anchor(self, anchor): - """ - *anchor* - - ===== ============ - value description - ===== ============ - 'C' Center - 'SW' bottom left - 'S' bottom - 'SE' bottom right - 'E' right - 'NE' top right - 'N' top - 'NW' top left - 'W' left - ===== ============ - - """ - if anchor in mtransforms.Bbox.coefs.keys() or len(anchor) == 2: - self._anchor = anchor - else: - raise ValueError('argument must be among %s' % - ', '.join(mtransforms.BBox.coefs.keys())) - - - def set_horizontal(self, h): - self._horizontal = h - - def get_horizontal(self): - return self._horizontal - - def set_vertical(self, v): - self._vertical = v - - def get_vertical(self): - return self._vertical - - - def get_anchor(self): - return self._anchor - - - def set_aspect(self, aspect=False): - """ - *aspect* : True or False - """ - self._aspect = aspect - - def get_aspect(self): - return self._aspect - - - def locate(self, nx, ny, nx1=None, ny1=None, renderer=None): - - - figW,figH = self._fig.get_size_inches() - x, y, w, h = self.get_position() - - k_h = self._calc_k(self._horizontal, figW*w, renderer) - k_v = self._calc_k(self._vertical, figH*h, renderer) - - if self.get_aspect(): - k = min(k_h, k_v) - ox = self._calc_offsets(self._horizontal, k, renderer) - oy = self._calc_offsets(self._vertical, k, renderer) - - ww = (ox[-1] - ox[0])/figW - hh = (oy[-1] - oy[0])/figH - pb = mtransforms.Bbox.from_bounds(x, y, w, h) - pb1 = mtransforms.Bbox.from_bounds(x, y, ww, hh) - pb1_anchored = pb1.anchored(self.get_anchor(), pb) - x0, y0 = pb1_anchored.x0, pb1_anchored.y0 - - else: - ox = self._calc_offsets(self._horizontal, k_h, renderer) - oy = self._calc_offsets(self._vertical, k_v, renderer) - x0, y0 = x, y - - - if nx1 is None: - nx1=nx+1 - if ny1 is None: - ny1=ny+1 - - x1, w1 = x0 + ox[nx]/figW, (ox[nx1] - ox[nx])/figW - y1, h1 = y0 + oy[ny]/figH, (oy[ny1] - oy[ny])/figH - - return mtransforms.Bbox.from_bounds(x1, y1, w1, h1) - - - def new_locator(self, nx, ny, nx1=None, ny1=None): - return AxesLocator(self, nx, ny, nx1, ny1) - - -class SubplotDivider(Divider): - - def __init__(self, fig, *args, **kwargs): - """ - *fig* is a :class:`matplotlib.figure.Figure` instance. - - *args* is the tuple (*numRows*, *numCols*, *plotNum*), where - the array of subplots in the figure has dimensions *numRows*, - *numCols*, and where *plotNum* is the number of the subplot - being created. *plotNum* starts at 1 in the upper left - corner and increases to the right. - - If *numRows* <= *numCols* <= *plotNum* < 10, *args* can be the - decimal integer *numRows* * 100 + *numCols* * 10 + *plotNum*. - """ - - self.figure = fig - - if len(args)==1: - s = str(args[0]) - if len(s) != 3: - raise ValueError('Argument to subplot must be a 3 digits long') - rows, cols, num = map(int, s) - elif len(args)==3: - rows, cols, num = args - else: - raise ValueError( 'Illegal argument to subplot') - - - total = rows*cols - num -= 1 # convert from matlab to python indexing - # ie num in range(0,total) - if num >= total: - raise ValueError( 'Subplot number exceeds total subplots') - self._rows = rows - self._cols = cols - self._num = num - - self.update_params() - - pos = self.figbox.bounds - horizontal = kwargs.pop("horizontal", []) - vertical = kwargs.pop("vertical", []) - aspect = kwargs.pop("aspect", None) - anchor = kwargs.pop("anchor", "C") - - if kwargs: - raise Exception("") - - Divider.__init__(self, fig, pos, horizontal, vertical, - aspect=aspect, anchor=anchor) - - - def get_position(self): - self.update_params() - return self.figbox.bounds - - - def update_params(self): - 'update the subplot position from fig.subplotpars' - - rows = self._rows - cols = self._cols - num = self._num - - pars = self.figure.subplotpars - left = pars.left - right = pars.right - bottom = pars.bottom - top = pars.top - wspace = pars.wspace - hspace = pars.hspace - totWidth = right-left - totHeight = top-bottom - - figH = totHeight/(rows + hspace*(rows-1)) - sepH = hspace*figH - - figW = totWidth/(cols + wspace*(cols-1)) - sepW = wspace*figW - - rowNum, colNum = divmod(num, cols) - - figBottom = top - (rowNum+1)*figH - rowNum*sepH - figLeft = left + colNum*(figW + sepW) - - self.figbox = mtransforms.Bbox.from_bounds(figLeft, figBottom, - figW, figH) - -class AxesDivider(Divider): - - - def __init__(self, axes): - self._axes = axes - self._xref = Size.AxesX(axes) - self._yref = Size.AxesY(axes) - Divider.__init__(self, fig=axes.get_figure(), pos=None, - horizontal=[self._xref], vertical=[self._yref], - aspect=None, anchor="C") - - def new_horizontal(self, size, pad=None, pack_start=False): - - if pad: - if not isinstance(pad, Size._Base): - pad = Size.from_any(pad, - fraction_ref=self._xref) - if pack_start: - self._horizontal.insert(0, pad) - self._xrefindex += 1 - else: - self._horizontal.append(pad) - - if not isinstance(size, Size._Base): - size = Size.from_any(size, - fraction_ref=self._xref) - - if pack_start: - self._horizontal.insert(0, pad) - self._xrefindex += 1 - locator = self.new_locator(nx=0, ny=0) - else: - self._horizontal.append(size) - locator = self.new_locator(nx=len(self._horizontal)-1, ny=0) - - ax = LocatableAxes(self._axes.get_figure(), - self._axes.get_position(original=True)) - locator = self.new_locator(nx=len(self._horizontal)-1, ny=0) - ax.set_axes_locator(locator) - - return ax - - def new_vertical(self, size, pad=None, pack_start=False): - - if pad: - if not isinstance(pad, Size._Base): - pad = Size.from_any(pad, - fraction_ref=self._yref) - if pack_start: - self._vertical.insert(0, pad) - self._yrefindex += 1 - else: - self._vertical.append(pad) - - if not isinstance(size, Size._Base): - size = Size.from_any(size, - fraction_ref=self._yref) - - if pack_start: - self._vertical.insert(0, pad) - self._yrefindex += 1 - locator = self.new_locator(nx=0, ny=0) - else: - self._vertical.append(size) - locator = self.new_locator(nx=0, ny=len(self._vertical)-1) - - ax = LocatableAxes(self._axes.get_figure(), - self._axes.get_position(original=True)) - ax.set_axes_locator(locator) - - return ax - - - def get_aspect(self): - if self._aspect is None: - aspect = self._axes.get_aspect() - if aspect == "auto": - return False - else: - return True - else: - return self._aspect - - def get_position(self): - if self._pos is None: - bbox = self._axes.get_position(original=True) - return bbox.bounds - else: - return self._pos - - def get_anchor(self): - if self._anchor is None: - return self._axes.get_anchor() - else: - return self._anchor - - - -class LocatableAxesBase: - def __init__(self, *kl, **kw): - - self._axes_class.__init__(self, *kl, **kw) - - self._locator = None - self._locator_renderer = None - - def set_axes_locator(self, locator): - self._locator = locator - - def get_axes_locator(self): - return self._locator - - def apply_aspect(self, position=None): - - if self.get_axes_locator() is None: - self._axes_class.apply_apsect(self, position) - else: - pos = self.get_axes_locator()(self, self._locator_renderer) - self._axes_class.apply_aspect(self, position=pos) - - - def draw(self, renderer=None, inframe=False): - - self._locator_renderer = renderer - - self._axes_class.draw(self, renderer, inframe) - - - -_locatableaxes_classes = {} -def locatable_axes_factory(axes_class): - - new_class = _locatableaxes_classes.get(axes_class) - if new_class is None: - new_class = new.classobj("Locatable%s" % (axes_class.__name__), - (LocatableAxesBase, axes_class), - {'_axes_class': axes_class}) - _locatableaxes_classes[axes_class] = new_class - - return new_class - -if hasattr(maxes.Axes, "get_axes_locator"): - LocatableAxes = maxes.Axes -else: - LocatableAxes = locatable_axes_factory(maxes.Axes) - - -def make_axes_locatable(axes): - if not hasattr(axes, "set_axes_locator"): - new_class = locatable_axes_factory(type(axes)) - axes.__class__ = new_class - - divider = AxesDivider(axes) - locator = divider.new_locator(nx=0, ny=0) - axes.set_axes_locator(locator) - - return divider - - -def get_demo_image(): - # prepare image - delta = 0.5 - - extent = (-3,4,-4,3) - import numpy as np - x = np.arange(-3.0, 4.001, delta) - y = np.arange(-4.0, 3.001, delta) - X, Y = np.meshgrid(x, y) - import matplotlib.mlab as mlab - Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0) - Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1) - Z = (Z1 - Z2) * 10 - - return Z, extent - -def demo_locatable_axes(): - import matplotlib.pyplot as plt - - fig1 = plt.figure(1, (6, 6)) - fig1.clf() - - ## PLOT 1 - # simple image & colorbar - ax = fig1.add_subplot(2, 2, 1) - - Z, extent = get_demo_image() - - im = ax.imshow(Z, extent=extent, interpolation="nearest") - cb = plt.colorbar(im) - plt.setp(cb.ax.get_yticklabels(), visible=False) - - - ## PLOT 2 - # image and colorbar whose location is adjusted in the drawing time. - # a hard way - - divider = SubplotDivider(fig1, 2, 2, 2, aspect=True) - - # axes for image - ax = LocatableAxes(fig1, divider.get_position()) - - # axes for coloarbar - ax_cb = LocatableAxes(fig1, divider.get_position()) - - h = [Size.AxesX(ax), # main axes - Size.Fixed(0.05), # padding, 0.1 inch - Size.Fixed(0.2), # colorbar, 0.3 inch - ] - - v = [Size.AxesY(ax)] - - divider.set_horizontal(h) - divider.set_vertical(v) - - ax.set_axes_locator(divider.new_locator(nx=0, ny=0)) - ax_cb.set_axes_locator(divider.new_locator(nx=2, ny=0)) - - fig1.add_axes(ax) - fig1.add_axes(ax_cb) - - ax_cb.yaxis.set_ticks_position("right") - - Z, extent = get_demo_image() - - im = ax.imshow(Z, extent=extent, interpolation="nearest") - plt.colorbar(im, cax=ax_cb) - plt.setp(ax_cb.get_yticklabels(), visible=False) - - plt.draw() - #plt.colorbar(im, cax=ax_cb) - - - ## PLOT 3 - # image and colorbar whose location is adjusted in the drawing time. - # a easy way - - ax = fig1.add_subplot(2, 2, 3) - divider = make_axes_locatable(ax) - - ax_cb = divider.new_horizontal(size="5%", pad=0.05) - fig1.add_axes(ax_cb) - - im = ax.imshow(Z, extent=extent, interpolation="nearest") - plt.colorbar(im, cax=ax_cb) - plt.setp(ax_cb.get_yticklabels(), visible=False) - - - ## PLOT 4 - # two images side by sied with fixed padding. - - ax = fig1.add_subplot(2, 2, 4) - divider = make_axes_locatable(ax) - - ax2 = divider.new_horizontal(size="100%", pad=0.05) - fig1.add_axes(ax2) - - ax.imshow(Z, extent=extent, interpolation="nearest") - ax2.imshow(Z, extent=extent, interpolation="nearest") - plt.setp(ax2.get_yticklabels(), visible=False) - plt.draw() - plt.show() - - -def demo_fixed_size_axes(): - import matplotlib.pyplot as plt - - fig2 = plt.figure(2, (6, 6)) - - # The first items are for padding and the second items are for the axes. - # sizes are in inch. - h = [Size.Fixed(1.0), Size.Fixed(4.5)] - v = [Size.Fixed(0.7), Size.Fixed(5.)] - - divider = Divider(fig2, (0.0, 0.0, 1., 1.), h, v, aspect=False) - # the width and height of the rectangle is ignored. - - ax = LocatableAxes(fig2, divider.get_position()) - ax.set_axes_locator(divider.new_locator(nx=1, ny=1)) - - fig2.add_axes(ax) - - ax.plot([1,2,3]) - - plt.draw() - plt.show() - #plt.colorbar(im, cax=ax_cb) - - - - - -if __name__ == "__main__": - demo_locatable_axes() - demo_fixed_size_axes() Deleted: trunk/matplotlib/examples/pylab_examples/axes_grid.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/axes_grid.py 2009-04-17 20:40:58 UTC (rev 7051) +++ trunk/matplotlib/examples/pylab_examples/axes_grid.py 2009-04-18 16:02:56 UTC (rev 7052) @@ -1,343 +0,0 @@ -import matplotlib.cbook as cbook - -import matplotlib.pyplot as plt - -from axes_divider import Size, SubplotDivider, LocatableAxes, Divider, get_demo_image - -class AxesGrid(object): - - def __init__(self, fig, rect, - nrows_ncols, - ngrids = None, - direction="row", - axes_pad = 0.02, - axes_class=None, - add_all=True, - share_all=False, - aspect=True, - label_mode="L", - colorbar_mode=None, - colorbar_location="right", - colorbar_pad=None, - colorbar_size="5%", - ): - - self._nrows, self._ncols = nrows_ncols - - if ngrids is None: - ngrids = self._nrows * self._ncols - else: - if (ngrids > self._nrows * self._ncols) or (ngrids <= 0): - raise Exception("") - - self.ngrids = ngrids - - self._axes_pad = axes_pad - - self._colorbar_mode = colorbar_mode - self._colorbar_location = colorbar_location - if colorbar_pad is None: - self._colorbar_pad = axes_pad - else: - self._colorbar_pad = colorbar_pad - - self._colorbar_size = colorbar_size - - if direction not in ["column", "row"]: - raise Exception("") - - self._direction = direction - - - if axes_class is None: - axes_class = LocatableAxes - - - self.axes_all = [] - self.axes_column = [[] for i in range(self._ncols)] - self.axes_row = [[] for i in range(self._nrows)] - - self.cbar_axes = [] - - h = [] - v = [] - if cbook.is_string_like(rect) or cbook.is_numlike(rect): - self._divider = SubplotDivider(fig, rect, horizontal=h, vertical=v, - aspect=aspect) - elif len(rect) == 3: - kw = dict(horizontal=h, vertical=v, aspect=aspect) - self._divider = SubplotDivider(fig, *rect, **kw) - elif len(rect) == 4: - self._divider = Divider(fig, rect, horizontal=h, vertical=v, - aspect=aspect) - else: - raise Exception("") - - - rect = self._divider.get_position() - - # reference axes - self._column_refax = [None for i in range(self._ncols)] - self._row_refax = [None for i in range(self._nrows)] - self._refax = None - - for i in range(self.ngrids): - - col, row = self.get_col_row(i) - - if share_all: - sharex = self._refax - sharey = self._refax - else: - sharex = self._column_refax[col] - sharey = self._row_refax[row] - - ax = axes_class(fig, rect, sharex=sharex, sharey=sharey) - - if share_all: - if self._refax is None: - self._refax = ax - else: - if sharex is None: - self._column_refax[col] = ax - if sharey is None: - self._row_refax[row] = ax - - self.axes_all.append(ax) - self.axes_column[col].append(ax) - self.axes_row[row].append(ax) - - cax = axes_class(fig, rect) - self.cbar_axes.append(cax) - - self.axes_llc = self.axes_column[0][-1] - - self._update_locators() - - if add_all: - for ax in self.axes_all+self.cbar_axes: - fig.add_axes(ax) - - self.set_label_mode(label_mode) - - - def _update_locators(self): - - h = [] - - h_ax_pos = [] - h_cb_pos = [] - for ax in self._column_refax: - if h: h.append(Size.Fixed(self._axes_pad)) - - h_ax_pos.append(len(h)) - - if ax: - sz = Size.AxesX(ax) - else: - sz = Size.AxesX(self.axes_llc) - h.append(sz) - - if self._colorbar_mode == "each" and self._colorbar_location == "right": - h.append(Size.from_any(self._colorbar_pad, sz)) - h_cb_pos.append(len(h)) - h.append(Size.from_any(self._colorbar_size, sz)) - - - v = [] - - v_ax_pos = [] - v_cb_pos = [] - for ax in self._row_refax[::-1]: - if v: v.append(Size.Fixed(self._axes_pad)) - v_ax_pos.append(len(v)) - if ax: - sz = Size.AxesY(ax) - else: - sz = Size.AxesY(self.axes_llc) - v.append(sz) - - - if self._colorbar_mode == "each" and self._colorbar_location == "top": - v.append(Size.from_any(self._colorbar_pad, sz)) - v_cb_pos.append(len(v)) - v.append(Size.from_any(self._colorbar_size, sz)) - - - for i in range(self.ngrids): - col, row = self.get_col_row(i) - #locator = self._divider.new_locator(nx=4*col, ny=2*(self._nrows - row - 1)) - locator = self._divider.new_locator(nx=h_ax_pos[col], - ny=v_ax_pos[self._nrows -1 - row]) - self.axes_all[i].set_axes_locator(locator) - - if self._colorbar_mode == "each": - if self._colorbar_location == "right": - locator = self._divider.new_locator(nx=h_cb_pos[col], - ny=v_ax_pos[self._nrows -1 - row]) - elif self._colorbar_location == "top": - locator = self._divider.new_locator(nx=h_ax_pos[col], - ny=v_cb_pos[self._nrows -1 - row]) - self.cbar_axes[i].set_axes_locator(locator) - - - if self._colorbar_mode == "single": - if self._colorbar_location == "right": - sz = Size.Fraction(Size.AxesX(self.axes_llc), self._nrows) - h.append(Size.from_any(self._colorbar_pad, sz)) - h.append(Size.from_any(self._colorbar_size, sz)) - locator = self._divider.new_locator(nx=-2, ny=0, ny1=-1) - elif self._colorbar_location == "top": - sz = Size.Fraction(Size.AxesY(self.axes_llc), self._ncols) - v.append(Size.from_any(self._colorbar_pad, sz)) - v.append(Size.from_any(self._colorbar_size, sz)) - locator = self._divider.new_locator(nx=0, nx1=-1, ny=-2) - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(False) - self.cbar_axes[0].set_axes_locator(locator) - self.cbar_axes[0].set_visible(True) - elif self._colorbar_mode == "each": - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(True) - else: - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(False) - - self._divider.set_horizontal(h) - self._divider.set_vertical(v) - - - - def get_col_row(self, n): - if self._direction == "column": - col, row = divmod(n, self._nrows) - else: - row, col = divmod(n, self._ncols) - - return col, row - - - def __getitem__(self, i): - return self.axes_all[i] - - - def get_geometry(self): - return self._nrows, self._ncols - - def set_axes_pad(self, axes_pad): - self._axes_pad = axes_pad - - def get_axes_pad(self): - return self._axes_pad - - def set_aspect(self, aspect): - self._divider.set_aspect(aspect) - - def get_aspect(self): - return self._divider.get_aspect() - - def set_label_mode(self, mode): - if mode == "all": - for ax in self.axes_all: - [l.set_visible(True) for l in ax.get_xticklabels()] - [l.set_visible(True) for l in ax.get_yticklabels()] - elif mode == "L": - for ax in self.axes_column[0][:-1]: - [l.set_visible(False) for l in ax.get_xticklabels()] - [l.set_visible(True) for l in ax.get_yticklabels()] - ax = self.axes_column[0][-1] - [l.set_visible(True) for l in ax.get_xticklabels()] - [l.set_visible(True) for l in ax.get_yticklabels()] - for col in self.axes_column[1:]: - for ax in col[:-1]: - [l.set_visible(False) for l in ax.get_xticklabels()] - [l.set_visible(False) for l in ax.get_yticklabels()] - ax = col[-1] - [l.set_visible(True) for l in ax.get_xticklabels()] - [l.set_visible(False) for l in ax.get_yticklabels()] - elif mode == "1": - for ax in self.axes_all: - [l.set_visible(False) for l in ax.get_xticklabels()] - [l.set_visible(False) for l in ax.get_yticklabels()] - ax = self.axes_llc - [l.set_visible(True) for l in ax.get_xticklabels()] - [l.set_visible(True) for l in ax.get_yticklabels()] - - - -if __name__ == "__main__": - F = plt.figure(1, (9, 3.5)) - F.clf() - - F.subplots_adjust(left=0.05, right=0.98) - - grid = AxesGrid(F, 131, # similar to subplot(111) - nrows_ncols = (2, 2), - direction="row", - axes_pad = 0.05, - add_all=True, - label_mode = "1", - ) - - Z, extent = get_demo_image() - plt.ioff() - for i in range(4): - im = grid[i].imshow(Z, extent=extent, interpolation="nearest") - - # This only affects axes in first column and second row as share_all = False. - grid.axes_llc.set_xticks([-2, 0, 2]) - grid.axes_llc.set_yticks([-2, 0, 2]) - plt.ion() - - - grid = AxesGrid(F, 132, # similar to subplot(111) - nrows_ncols = (2, 2), - direction="row", - axes_pad = 0.0, - add_all=True, - share_all=True, - label_mode = "1", - colorbar_mode="single", - ) - - Z, extent = get_demo_image() - plt.ioff() - for i in range(4): - im = grid[i].imshow(Z, extent=extent, interpolation="nearest") - plt.colorbar(im, cax = grid.cbar_axes[0]) - plt.setp(grid.cbar_axes[0].get_yticklabels(), visible=False) - - # This affects all axes as share_all = True. - grid.axes_llc.set_xticks([-2, 0, 2]) - grid.axes_llc.set_yticks([-2, 0, 2]) - - plt.ion() - - - - grid = AxesGrid(F, 133, # similar to subplot(122) - nrows_ncols = (2, 2), - direction="row", - axes_pad = 0.1, - add_all=True, - label_mode = "1", - share_all = True, - colorbar_location="top", - colorbar_mode="each", - colorbar_size="7%", - colorbar_pad="2%", - ) - plt.ioff() - for i in range(4): - im = grid[i].imshow(Z, extent=extent, interpolation="nearest") - plt.colorbar(im, cax = grid.cbar_axes[i], - orientation="horizontal") - grid.cbar_axes[i].xaxis.set_ticks_position("top") - plt.setp(grid.cbar_axes[i].get_xticklabels(), visible=False) - - # This affects all axes as share_all = True. - grid.axes_llc.set_xticks([-2, 0, 2]) - grid.axes_llc.set_yticks([-2, 0, 2]) - - plt.ion() - plt.draw() Modified: trunk/matplotlib/lib/matplotlib/offsetbox.py =================================================================== --- trunk/matplotlib/lib/matplotlib/offsetbox.py 2009-04-17 20:40:58 UTC (rev 7051) +++ trunk/matplotlib/lib/matplotlib/offsetbox.py 2009-04-18 16:02:56 UTC (rev 7052) @@ -782,7 +782,8 @@ explicitly specify the bbox_to_anchor. """ - def __init__(self, loc, pad=0.4, borderpad=0.5, + def __init__(self, loc, + pad=0.4, borderpad=0.5, child=None, prop=None, frameon=True, bbox_to_anchor=None, bbox_transform=None): @@ -801,7 +802,6 @@ 'upper center' : 9, 'center' : 10, - pad : pad around the child for drawing a frame. given in fraction of fontsize. @@ -813,12 +813,15 @@ frameon : draw a frame box if True. - bbox_to_anchor : bbox to anchor. If None, use axes.bbox. + bbox_to_anchor : bbox to anchor. Use self.axes.bbox if None. + bbox_transform : with which the bbox_to_anchor will be transformed. + """ super(AnchoredOffsetbox, self).__init__() + self.set_bbox_to_anchor(bbox_to_anchor, bbox_transform) self.set_child(child) self.loc = loc @@ -838,8 +841,6 @@ ) self.patch.set_boxstyle("square",pad=0) self._drawFrame = frameon - #self._parent_bbox = bbox_to_anchor - self.set_bbox_to_anchor(bbox_to_anchor, bbox_transform) @@ -878,13 +879,14 @@ else: transform = self._bbox_to_anchor_transform if transform is None: - transform = BboxTransformTo(self.axes.bbox) + return self._bbox_to_anchor + else: + return TransformedBbox(self._bbox_to_anchor, + transform) + - return TransformedBbox(self._bbox_to_anchor, - transform) - def set_bbox_to_anchor(self, bbox, transform=None): """ set the bbox that the child will be anchored. @@ -892,12 +894,9 @@ *bbox* can be a Bbox instance, a list of [left, bottom, width, height], or a list of [left, bottom] where the width and height will be assumed to be zero. The bbox will be - transformed to display coordinate by the given transform. If - transform is None, axes.transAxes will be use. + transformed to display coordinate by the given transform. """ - if bbox is None: - self._bbox_to_anchor = None - elif isinstance(bbox, BboxBase): + if bbox is None or isinstance(bbox, BboxBase): self._bbox_to_anchor = bbox else: try: Modified: trunk/matplotlib/lib/mpl_toolkits/axes_grid/anchored_artists.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/anchored_artists.py 2009-04-17 20:40:58 UTC (rev 7051) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/anchored_artists.py 2009-04-18 16:02:56 UTC (rev 7052) @@ -78,45 +78,3 @@ -if __name__ == "__main__": - import matplotlib.pyplot as plt - from matplotlib.patches import Circle - - #import matplotlib.offsetbox - #matplotlib.offsetbox.DEBUG=False - - #ax = plt.subplot(1,1,1) - plt.clf() - plt.cla() - plt.draw() - ax = plt.gca() - ax.set_aspect(1.) - - at = AnchoredText("Figure 1a", - loc=2, frameon=True) - at.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") - ax.add_artist(at) - - ada = AnchoredDrawingArea(20, 20, 0, 0, - loc=1, pad=0., frameon=False) - p = Circle((10, 10), 10) - ada.da.add_artist(p) - ax.add_artist(ada) - - - as = AnchoredSizeBar(ax, 0.1, r"1$^{\prime}$", - loc=8, - pad=0.1, borderpad=0.5, sep=5, - frameon=False) - ax.add_artist(as) - - - ae = AnchoredEllipse(ax, width=0.1, height=0.15, angle=0., - loc=3, pad=0.5, borderpad=0.4, frameon=True) - - ax.add_artist(ae) - - plt.draw() - plt.show() - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |