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.
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today.
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins