def add_axes(self, *args, **kwargs):
key = self._make_key(*args, **kwargs)<EOL>if key in self._seen:<EOL><INDENT>ax = self._seen[key]<EOL>self.sca(ax)<EOL>return ax<EOL><DEDENT>if not len(args): return<EOL>if isinstance(args[<NUM_LIT:0>], Axes):<EOL><INDENT>a = args[<NUM_LIT:0>]<EOL>assert(a.get_figure() is self)<EOL><DEDENT>else:<EOL><INDENT>rect = args[<NUM_LIT:0>]<EOL>ispolar = kwargs.pop('<STR_LIT>', False)<EOL>projection = kwargs.pop('<STR_LIT>', None)<EOL>if ispolar:<EOL><INDENT>if projection is not None and projection != '<STR_LIT>':<EOL><INDENT>raise ValueError(<EOL>"<STR_LIT>" +<EOL>"<STR_LIT>" %<EOL>projection)<EOL><DEDENT>projection = '<STR_LIT>'<EOL><DEDENT>a = projection_factory(projection, self, rect, **kwargs)<EOL><DEDENT>self.axes.append(a)<EOL>self._axstack.push(a)<EOL>self.sca(a)<EOL>self._seen[key] = a<EOL>return a<EOL>
Add an a axes with axes rect [*left*, *bottom*, *width*,
*height*] where all quantities are in fractions of figure
width and height.  kwargs are legal
:class:`~matplotlib.axes.Axes` kwargs plus *projection* which
sets the projection type of the axes.  (For backward
compatibility, ``polar=True`` may also be provided, which is
equivalent to ``projection='polar'``).  Valid values for
*projection* are: %(list)s.  Some of these projections support
additional kwargs, which may be provided to :meth:`add_axes`::

    rect = l,b,w,h
    fig.add_axes(rect)
    fig.add_axes(rect, frameon=False, axisbg='g')
    fig.add_axes(rect, polar=True)
    fig.add_axes(rect, projection='polar')
    fig.add_axes(ax)   # add an Axes instance

If the figure already has an axes with the same parameters,
then it will simply make that axes current and return it.  If
you do not want this behavior, eg. you want to force the
creation of a new axes, you must use a unique set of args and
kwargs.  The axes :attr:`~matplotlib.axes.Axes.label`
attribute has been exposed for this purpose.  Eg., if you want
two axes that are otherwise identical to be added to the
figure, make sure you give them unique labels::

    fig.add_axes(rect, label='axes1')
    fig.add_axes(rect, label='axes2')

The :class:`~matplotlib.axes.Axes` instance will be returned.

The following kwargs are supported:

%(Axes)s