Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > a44f8c7e78ee9c5838c1fb080c9e7630 > files > 4510

python-matplotlib-doc-1.1.1-1mdv2010.1.noarch.rpm



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Annotating Axes &mdash; Matplotlib v1.1.1 documentation</title>
    <link rel="stylesheet" href="../_static/mpl.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '1.1.1',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within Matplotlib v1.1.1 documentation"
          href="../_static/opensearch.xml"/>
    <link rel="top" title="Matplotlib v1.1.1 documentation" href="../index.html" />
    <link rel="up" title="User’s Guide" href="index.html" />
    <link rel="next" title="Our Favorite Recipes" href="recipes.html" />
    <link rel="prev" title="Path Tutorial" href="path_tutorial.html" /> 
  </head>
  <body>
<!-- Piwik -->
<script type="text/javascript">
if ("matplotlib.sourceforge.net" == document.location.hostname ||
    "matplotlib.sf.net" == document.location.hostname) {
  var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/matplotlib/" : "http://apps.sourceforge.net/piwik/matplotlib/");
  document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>
<script type="text/javascript">
if ("matplotlib.sourceforge.net" == document.location.hostname ||
    "matplotlib.sf.net" == document.location.hostname) {
  piwik_action_name = '';
  piwik_idsite = 1;
  piwik_url = pkBaseURL + "piwik.php";
  piwik_log(piwik_action_name, piwik_idsite, piwik_url);
  document.write(unescape('%3Cobject%3E%3Cnoscript%3E%3Cp%3E%3Cimg src="http://apps.sourceforge.net/piwik/matplotlib/piwik.php?idsite=1" alt="piwik"/%3E%3C/p%3E%3C/noscript%3E%3C/object%3E'));
}
</script>
<!-- End Piwik Tag -->
<link rel="shortcut icon" href="_static/favicon.ico">

<div style="background-color: white; text-align: left; padding: 10px 10px 15px 15px">
<a href="../index.html"><img src="../_static/logo2.png" border="0" alt="matplotlib"/></a>
</div>

    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="recipes.html" title="Our Favorite Recipes"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="path_tutorial.html" title="Path Tutorial"
             accesskey="P">previous</a> |</li>
        <li><a href="../index.html">home</a>|&nbsp;</li>
        <li><a href="../search.html">search</a>|&nbsp;</li>
        <li><a href="../examples/index.html">examples</a>|&nbsp;</li>
        <li><a href="../gallery.html">gallery</a>|&nbsp;</li>
        <li><a href="../contents.html">docs</a> &raquo;</li>

          <li><a href="index.html" accesskey="U">User&#8217;s Guide</a> &raquo;</li> 
      </ul>
    </div>

      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../contents.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Annotating Axes</a><ul>
<li><a class="reference internal" href="#annotating-with-text-with-box">Annotating with Text with Box</a></li>
<li><a class="reference internal" href="#annotating-with-arrow">Annotating with Arrow</a></li>
<li><a class="reference internal" href="#placing-artist-at-the-anchored-location-of-the-axes">Placing Artist at the anchored location of the Axes</a></li>
<li><a class="reference internal" href="#using-complex-coordinate-with-annotation">Using Complex Coordinate with Annotation</a></li>
<li><a class="reference internal" href="#using-connectorpatch">Using ConnectorPatch</a><ul>
<li><a class="reference internal" href="#advanced-topics">Advanced Topics</a></li>
</ul>
</li>
<li><a class="reference internal" href="#zoom-effect-between-axes">Zoom effect between Axes</a></li>
<li><a class="reference internal" href="#define-custom-boxstyle">Define Custom BoxStyle</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="path_tutorial.html"
                        title="previous chapter">Path Tutorial</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="recipes.html"
                        title="next chapter">Our Favorite Recipes</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="../_sources/users/annotations_guide.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" size="18" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="annotating-axes">
<span id="plotting-guide-annotation"></span><h1>Annotating Axes<a class="headerlink" href="#annotating-axes" title="Permalink to this headline">¶</a></h1>
<p>Do not proceed unless you already have read <a class="reference internal" href="annotations_intro.html#annotations-tutorial"><em>Annotating text</em></a>,
<a class="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.text" title="matplotlib.pyplot.text"><tt class="xref py py-func docutils literal"><span class="pre">text()</span></tt></a> and
<a class="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.annotate" title="matplotlib.pyplot.annotate"><tt class="xref py py-func docutils literal"><span class="pre">annotate()</span></tt></a>!</p>
<div class="section" id="annotating-with-text-with-box">
<h2>Annotating with Text with Box<a class="headerlink" href="#annotating-with-text-with-box" title="Permalink to this headline">¶</a></h2>
<p>Let&#8217;s start with a simple example.</p>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_text_arrow.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_text_arrow.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_text_arrow.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_text_arrow.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_text_arrow.png" src="../_images/annotate_text_arrow.png" />
</div>
<p>The <a class="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.text" title="matplotlib.pyplot.text"><tt class="xref py py-func docutils literal"><span class="pre">text()</span></tt></a> function in the pyplot module (or
text method of the Axes class) takes bbox keyword argument, and when
given, a box around the text is drawn.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">bbox_props</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;rarrow,pad=0.3&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;cyan&quot;</span><span class="p">,</span> <span class="n">ec</span><span class="o">=</span><span class="s">&quot;b&quot;</span><span class="p">,</span> <span class="n">lw</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s">&quot;Direction&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">,</span>
            <span class="n">size</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span>
            <span class="n">bbox</span><span class="o">=</span><span class="n">bbox_props</span><span class="p">)</span>
</pre></div>
</div>
<p>The patch object associated with the text can be accessed by:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">bb</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">get_bbox_patch</span><span class="p">()</span>
</pre></div>
</div>
<p>The return value is an instance of FancyBboxPatch and the patch
properties like facecolor, edgewidth, etc. can be accessed and
modified as usual. To change the shape of the box, use <em>set_boxstyle</em>
method.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">bb</span><span class="o">.</span><span class="n">set_boxstyle</span><span class="p">(</span><span class="s">&quot;rarrow&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.6</span><span class="p">)</span>
</pre></div>
</div>
<p>The arguments are the name of the box style with its attributes as
keyword arguments. Currently, following box styles are implemented.</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="20%" />
<col width="28%" />
<col width="52%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Class</th>
<th class="head">Name</th>
<th class="head">Attrs</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>LArrow</td>
<td><tt class="docutils literal"><span class="pre">larrow</span></tt></td>
<td>pad=0.3</td>
</tr>
<tr><td>RArrow</td>
<td><tt class="docutils literal"><span class="pre">rarrow</span></tt></td>
<td>pad=0.3</td>
</tr>
<tr><td>Round</td>
<td><tt class="docutils literal"><span class="pre">round</span></tt></td>
<td>pad=0.3,rounding_size=None</td>
</tr>
<tr><td>Round4</td>
<td><tt class="docutils literal"><span class="pre">round4</span></tt></td>
<td>pad=0.3,rounding_size=None</td>
</tr>
<tr><td>Roundtooth</td>
<td><tt class="docutils literal"><span class="pre">roundtooth</span></tt></td>
<td>pad=0.3,tooth_size=None</td>
</tr>
<tr><td>Sawtooth</td>
<td><tt class="docutils literal"><span class="pre">sawtooth</span></tt></td>
<td>pad=0.3,tooth_size=None</td>
</tr>
<tr><td>Square</td>
<td><tt class="docutils literal"><span class="pre">square</span></tt></td>
<td>pad=0.3</td>
</tr>
</tbody>
</table>
</div></blockquote>
<p>(<a class="reference external" href="../mpl_examples/pylab_examples/fancybox_demo2.py">Source code</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancybox_demo2.png">png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancybox_demo2.hires.png">hires.png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancybox_demo2.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/fancybox_demo2.png" src="../_images/fancybox_demo2.png" />
</div>
<p>Note that the attributes arguments can be specified within the style
name with separating comma (this form can be used as &#8220;boxstyle&#8221; value
of bbox argument when initializing the text instance)</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">bb</span><span class="o">.</span><span class="n">set_boxstyle</span><span class="p">(</span><span class="s">&quot;rarrow,pad=0.6&quot;</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="section" id="annotating-with-arrow">
<h2>Annotating with Arrow<a class="headerlink" href="#annotating-with-arrow" title="Permalink to this headline">¶</a></h2>
<p>The <a class="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.annotate" title="matplotlib.pyplot.annotate"><tt class="xref py py-func docutils literal"><span class="pre">annotate()</span></tt></a> function in the pyplot module
(or annotate method of the Axes class) is used to draw an arrow
connecting two points on the plot.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Annotation&quot;</span><span class="p">,</span>
            <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&#39;data&#39;</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="s">&#39;offset points&#39;</span><span class="p">,</span>
            <span class="p">)</span>
</pre></div>
</div>
<p>This annotates a point at <tt class="docutils literal"><span class="pre">xy</span></tt> in the given coordinate (<tt class="docutils literal"><span class="pre">xycoords</span></tt>)
with the text at <tt class="docutils literal"><span class="pre">xytext</span></tt> given in <tt class="docutils literal"><span class="pre">textcoords</span></tt>. Often, the
annotated point is specified in the <em>data</em> coordinate and the annotating
text in <em>offset points</em>.
See <a class="reference internal" href="../api/pyplot_api.html#matplotlib.pyplot.annotate" title="matplotlib.pyplot.annotate"><tt class="xref py py-func docutils literal"><span class="pre">annotate()</span></tt></a> for available coordinate systems.</p>
<p>An arrow connecting two point (xy &amp; xytext) can be optionally drawn by
specifying the <tt class="docutils literal"><span class="pre">arrowprops</span></tt> argument. To draw only an arrow, use
empty string as the first argument.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;&quot;</span><span class="p">,</span>
            <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&#39;data&#39;</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="s">&#39;data&#39;</span><span class="p">,</span>
            <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s">&quot;-&gt;&quot;</span><span class="p">,</span>
                            <span class="n">connectionstyle</span><span class="o">=</span><span class="s">&quot;arc3&quot;</span><span class="p">),</span>
            <span class="p">)</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple01.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple01.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple01.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple01.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple01.png" src="../_images/annotate_simple01.png" />
</div>
<p>The arrow drawing takes a few steps.</p>
<ol class="arabic simple">
<li>a connecting path between two points are created. This is
controlled by <tt class="docutils literal"><span class="pre">connectionstyle</span></tt> key value.</li>
<li>If patch object is given (<em>patchA</em> &amp; <em>patchB</em>), the path is clipped to
avoid the patch.</li>
<li>The path is further shrunk by given amount of pixels (<em>shirnkA</em>
&amp; <em>shrinkB</em>)</li>
<li>The path is transmuted to arrow patch, which is controlled by the
<tt class="docutils literal"><span class="pre">arrowstyle</span></tt> key value.</li>
</ol>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_explain.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_explain.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_explain.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_explain.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_explain.png" src="../_images/annotate_explain.png" />
</div>
<p>The creation of the connecting path between two points is controlled by
<tt class="docutils literal"><span class="pre">connectionstyle</span></tt> key and following styles are available.</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="82%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Name</th>
<th class="head">Attrs</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">angle</span></tt></td>
<td>angleA=90,angleB=0,rad=0.0</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">angle3</span></tt></td>
<td>angleA=90,angleB=0</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">arc</span></tt></td>
<td>angleA=0,angleB=0,armA=None,armB=None,rad=0.0</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">arc3</span></tt></td>
<td>rad=0.0</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">bar</span></tt></td>
<td>armA=0.0,armB=0.0,fraction=0.3,angle=None</td>
</tr>
</tbody>
</table>
</div></blockquote>
<p>Note that &#8220;3&#8221; in <tt class="docutils literal"><span class="pre">angle3</span></tt> and <tt class="docutils literal"><span class="pre">arc3</span></tt> is meant to indicate that the
resulting path is a quadratic spline segment (three control
points). As will be discussed below, some arrow style option only can
be used when the connecting path is a quadratic spline.</p>
<p>The behavior of each connection style is (limitedly) demonstrated in the
example below. (Warning : The behavior of the <tt class="docutils literal"><span class="pre">bar</span></tt> style is currently not
well defined, it may be changed in the future).</p>
<p>(<a class="reference external" href="../users/plotting/examples/connectionstyle_demo.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/connectionstyle_demo.png">png</a>, <a class="reference external" href="../users/plotting/examples/connectionstyle_demo.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/connectionstyle_demo.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/connectionstyle_demo.png" src="../_images/connectionstyle_demo.png" />
</div>
<p>The connecting path (after clipping and shrinking) is then mutated to
an arrow patch, according to the given <tt class="docutils literal"><span class="pre">arrowstyle</span></tt>.</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="82%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Name</th>
<th class="head">Attrs</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="docutils literal"><span class="pre">-</span></tt></td>
<td>None</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">-&gt;</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">-[</span></tt></td>
<td>widthB=1.0,lengthB=0.2,angleB=None</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">|-|</span></tt></td>
<td>widthA=1.0,widthB=1.0</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">-|&gt;</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">&lt;-</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">&lt;-&gt;</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">&lt;|-</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">&lt;|-|&gt;</span></tt></td>
<td>head_length=0.4,head_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">fancy</span></tt></td>
<td>head_length=0.4,head_width=0.4,tail_width=0.4</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">simple</span></tt></td>
<td>head_length=0.5,head_width=0.5,tail_width=0.2</td>
</tr>
<tr><td><tt class="docutils literal"><span class="pre">wedge</span></tt></td>
<td>tail_width=0.3,shrink_factor=0.5</td>
</tr>
</tbody>
</table>
</div></blockquote>
<p>(<a class="reference external" href="../mpl_examples/pylab_examples/fancyarrow_demo.py">Source code</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancyarrow_demo.png">png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancyarrow_demo.hires.png">hires.png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/fancyarrow_demo.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/fancyarrow_demo.png" src="../_images/fancyarrow_demo.png" />
</div>
<p>Some arrowstyles only work with connection style that generates a
quadratic-spline segment. They are <tt class="docutils literal"><span class="pre">fancy</span></tt>, <tt class="docutils literal"><span class="pre">simple</span></tt>, and <tt class="docutils literal"><span class="pre">wedge</span></tt>.
For these arrow styles, you must use &#8220;angle3&#8221; or &#8220;arc3&#8221; connection
style.</p>
<p>If the annotation string is given, the patchA is set to the bbox patch
of the text by default.</p>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple02.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple02.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple02.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple02.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple02.png" src="../_images/annotate_simple02.png" />
</div>
<p>As in the text command, a box around the text can be drawn using
the <tt class="docutils literal"><span class="pre">bbox</span></tt> argument.</p>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple03.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple03.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple03.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple03.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple03.png" src="../_images/annotate_simple03.png" />
</div>
<p>By default, the starting point is set to the center of the text
extent.  This can be adjusted with <tt class="docutils literal"><span class="pre">relpos</span></tt> key value. The values
are normalized to the extent of the text. For example, (0,0) means
lower-left corner and (1,1) means top-right.</p>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple04.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple04.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple04.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple04.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple04.png" src="../_images/annotate_simple04.png" />
</div>
</div>
<div class="section" id="placing-artist-at-the-anchored-location-of-the-axes">
<h2>Placing Artist at the anchored location of the Axes<a class="headerlink" href="#placing-artist-at-the-anchored-location-of-the-axes" title="Permalink to this headline">¶</a></h2>
<p>There are class of artist that can be placed at the anchored location
of the Axes. A common example is the legend.  This type of artists can
be created by using the OffsetBox class. A few predefined classes are
available in <tt class="docutils literal"><span class="pre">mpl_toolkits.axes_grid.anchored_artists</span></tt>.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid.anchored_artists</span> <span class="kn">import</span> <span class="n">AnchoredText</span>
<span class="n">at</span> <span class="o">=</span> <span class="n">AnchoredText</span><span class="p">(</span><span class="s">&quot;Figure 1a&quot;</span><span class="p">,</span>
                  <span class="n">prop</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="mi">8</span><span class="p">),</span> <span class="n">frameon</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
                  <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
                  <span class="p">)</span>
<span class="n">at</span><span class="o">.</span><span class="n">patch</span><span class="o">.</span><span class="n">set_boxstyle</span><span class="p">(</span><span class="s">&quot;round,pad=0.,rounding_size=0.2&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_artist</span><span class="p">(</span><span class="n">at</span><span class="p">)</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/anchored_box01.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/anchored_box01.png">png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box01.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box01.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/anchored_box01.png" src="../_images/anchored_box01.png" />
</div>
<p>The <em>loc</em> keyword has same meaning as in the legend command.</p>
<p>A simple application is when the size of the artist (or collection of
artists) is known in pixel size during the time of creation. For
example, If you want to draw a circle with fixed size of 20 pixel x 20
pixel (radius = 10 pixel), you can utilize
<tt class="docutils literal"><span class="pre">AnchoredDrawingArea</span></tt>. The instance is created with a size of the
drawing area (in pixel). And user can add arbitrary artist to the
drawing area. Note that the extents of the artists that are added to
the drawing area has nothing to do with the placement of the drawing
area itself. The initial size only matters.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid.anchored_artists</span> <span class="kn">import</span> <span class="n">AnchoredDrawingArea</span>

<span class="n">ada</span> <span class="o">=</span> <span class="n">AnchoredDrawingArea</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span>
                          <span class="n">loc</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.</span><span class="p">,</span> <span class="n">frameon</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
<span class="n">p1</span> <span class="o">=</span> <span class="n">Circle</span><span class="p">((</span><span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">ada</span><span class="o">.</span><span class="n">drawing_area</span><span class="o">.</span><span class="n">add_artist</span><span class="p">(</span><span class="n">p1</span><span class="p">)</span>
<span class="n">p2</span> <span class="o">=</span> <span class="n">Circle</span><span class="p">((</span><span class="mi">30</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="mi">5</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;r&quot;</span><span class="p">)</span>
<span class="n">ada</span><span class="o">.</span><span class="n">drawing_area</span><span class="o">.</span><span class="n">add_artist</span><span class="p">(</span><span class="n">p2</span><span class="p">)</span>
</pre></div>
</div>
<p>The artists that are added to the drawing area should not have
transform set (they will be overridden) and the dimension of those
artists are interpreted as a pixel coordinate, i.e., the radius of the
circles in above example are 10 pixel and 5 pixel, respectively.</p>
<p>(<a class="reference external" href="../users/plotting/examples/anchored_box02.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/anchored_box02.png">png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box02.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box02.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/anchored_box02.png" src="../_images/anchored_box02.png" />
</div>
<p>Sometimes, you want to your artists scale with data coordinate (or
other coordinate than canvas pixel). You can use
<tt class="docutils literal"><span class="pre">AnchoredAuxTransformBox</span></tt> class. This is similar to
<tt class="docutils literal"><span class="pre">AnchoredDrawingArea</span></tt> except that the extent of the artist is
determined during the drawing time respecting the specified transform.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid.anchored_artists</span> <span class="kn">import</span> <span class="n">AnchoredAuxTransformBox</span>

<span class="n">box</span> <span class="o">=</span> <span class="n">AnchoredAuxTransformBox</span><span class="p">(</span><span class="n">ax</span><span class="o">.</span><span class="n">transData</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">el</span> <span class="o">=</span> <span class="n">Ellipse</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mf">0.4</span><span class="p">,</span> <span class="n">angle</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span> <span class="c"># in data coordinates!</span>
<span class="n">box</span><span class="o">.</span><span class="n">drawing_area</span><span class="o">.</span><span class="n">add_artist</span><span class="p">(</span><span class="n">el</span><span class="p">)</span>
</pre></div>
</div>
<p>The ellipse in the above example will have width and height
corresponds to 0.1 and 0.4 in data coordinate and will be
automatically scaled when the view limits of the axes change.</p>
<p>(<a class="reference external" href="../users/plotting/examples/anchored_box03.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/anchored_box03.png">png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box03.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box03.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/anchored_box03.png" src="../_images/anchored_box03.png" />
</div>
<p>As in the legend, the bbox_to_anchor argument can be set.  Using the
HPacker and VPacker, you can have an arrangement(?) of artist as in the
legend (as a matter of fact, this is how the legend is created).</p>
<p>(<a class="reference external" href="../users/plotting/examples/anchored_box04.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/anchored_box04.png">png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box04.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/anchored_box04.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/anchored_box04.png" src="../_images/anchored_box04.png" />
</div>
<p>Note that unlike the legend, the <tt class="docutils literal"><span class="pre">bbox_transform</span></tt> is set
to IdentityTransform by default.</p>
</div>
<div class="section" id="using-complex-coordinate-with-annotation">
<h2>Using Complex Coordinate with Annotation<a class="headerlink" href="#using-complex-coordinate-with-annotation" title="Permalink to this headline">¶</a></h2>
<p>The Annotation in matplotlib support several types of coordinate as
described in <a class="reference internal" href="annotations_intro.html#annotations-tutorial"><em>Annotating text</em></a>. For an advanced user who wants
more control, it supports a few other options.</p>
<blockquote>
<div><ol class="arabic">
<li><p class="first"><a class="reference internal" href="../devel/transformations.html#matplotlib.transforms.Transform" title="matplotlib.transforms.Transform"><tt class="xref py py-class docutils literal"><span class="pre">Transform</span></tt></a> instance. For example,</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">ax</span><span class="o">.</span><span class="n">transAxes</span><span class="p">)</span>
</pre></div>
</div>
<p>is identical to</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&quot;axes fraction&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>With this, you can annotate a point in other axes.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ax1</span><span class="p">,</span> <span class="n">ax2</span> <span class="o">=</span> <span class="n">subplot</span><span class="p">(</span><span class="mi">121</span><span class="p">),</span> <span class="n">subplot</span><span class="p">(</span><span class="mi">122</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">ax1</span><span class="o">.</span><span class="n">transData</span><span class="p">,</span>
             <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="n">ax2</span><span class="o">.</span><span class="n">transData</span><span class="p">,</span>
             <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s">&quot;-&gt;&quot;</span><span class="p">))</span>
</pre></div>
</div>
</li>
<li><p class="first"><a class="reference internal" href="../api/artist_api.html#matplotlib.artist.Artist" title="matplotlib.artist.Artist"><tt class="xref py py-class docutils literal"><span class="pre">Artist</span></tt></a> instance. The xy value (or
xytext) is interpreted as a fractional coordinate of the bbox
(return value of <em>get_window_extent</em>) of the artist.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">an1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 1&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">))</span>
<span class="n">an2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 2&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">an1</span><span class="p">,</span> <span class="c"># (1,0.5) of the an1&#39;s bbox</span>
                  <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="s">&quot;offset points&quot;</span><span class="p">,</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;left&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">),</span>
                  <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s">&quot;-&gt;&quot;</span><span class="p">))</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple_coord01.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord01.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord01.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord01.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple_coord01.png" src="../_images/annotate_simple_coord01.png" />
</div>
<p>Note that it is your responsibility that the extent of the
coordinate artist (<em>an1</em> in above example) is determined before <em>an2</em>
gets drawn. In most cases, it means that an2 needs to be drawn
later than <em>an1</em>.</p>
</li>
<li><p class="first">A callable object that returns an instance of either
<a class="reference internal" href="../devel/transformations.html#matplotlib.transforms.BboxBase" title="matplotlib.transforms.BboxBase"><tt class="xref py py-class docutils literal"><span class="pre">BboxBase</span></tt></a> or
<a class="reference internal" href="../devel/transformations.html#matplotlib.transforms.Transform" title="matplotlib.transforms.Transform"><tt class="xref py py-class docutils literal"><span class="pre">Transform</span></tt></a>. If a transform is
returned, it is same as 1 and if bbox is returned, it is same
as 2.  The callable object should take a single argument of
renderer instance. For example, following two commands give
identical results</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">an2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 2&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">an1</span><span class="p">,</span>
                  <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="s">&quot;offset points&quot;</span><span class="p">)</span>
<span class="n">an2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 2&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">an1</span><span class="o">.</span><span class="n">get_window_extent</span><span class="p">,</span>
                  <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="s">&quot;offset points&quot;</span><span class="p">)</span>
</pre></div>
</div>
</li>
<li><p class="first">A tuple of two coordinate specification. The first item is for
x-coordinate and the second is for y-coordinate. For example,</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="p">(</span><span class="s">&quot;data&quot;</span><span class="p">,</span> <span class="s">&quot;axes fraction&quot;</span><span class="p">))</span>
</pre></div>
</div>
<p>0.5 is in data coordinate, and 1 is in normalized axes coordinate.
You may use an atist or transform as with a tuple. For example,</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>

<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span>
<span class="n">ax</span><span class="o">=</span><span class="n">plt</span><span class="o">.</span><span class="n">axes</span><span class="p">([</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">])</span>
<span class="n">an1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 1&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">))</span>

<span class="n">an2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 2&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">1.</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="n">an1</span><span class="p">,</span>
                  <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span><span class="mf">1.1</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="p">(</span><span class="n">an1</span><span class="p">,</span> <span class="s">&quot;axes fraction&quot;</span><span class="p">),</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;bottom&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">),</span>
                  <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s">&quot;-&gt;&quot;</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple_coord02.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord02.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord02.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord02.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple_coord02.png" src="../_images/annotate_simple_coord02.png" />
</div>
</li>
<li><p class="first">Sometimes, you want your annotation with some &#8220;offset points&#8221;, but
not from the annotated point but from other
point. <a class="reference internal" href="../api/artist_api.html#matplotlib.text.OffsetFrom" title="matplotlib.text.OffsetFrom"><tt class="xref py py-class docutils literal"><span class="pre">OffsetFrom</span></tt></a> is a helper class for such
case.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>

<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span>
<span class="n">ax</span><span class="o">=</span><span class="n">plt</span><span class="o">.</span><span class="n">axes</span><span class="p">([</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.8</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">])</span>
<span class="n">an1</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 1&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">))</span>

<span class="kn">from</span> <span class="nn">matplotlib.text</span> <span class="kn">import</span> <span class="n">OffsetFrom</span>
<span class="n">offset_from</span> <span class="o">=</span> <span class="n">OffsetFrom</span><span class="p">(</span><span class="n">an1</span><span class="p">,</span> <span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="n">an2</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">annotate</span><span class="p">(</span><span class="s">&quot;Test 2&quot;</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">),</span> <span class="n">xycoords</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span>
                  <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">),</span> <span class="n">textcoords</span><span class="o">=</span><span class="n">offset_from</span><span class="p">,</span>
                  <span class="c"># xytext is offset points from &quot;xy=(0.5, 0), xycoords=an1&quot;</span>
                  <span class="n">va</span><span class="o">=</span><span class="s">&quot;top&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span>
                  <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;round&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s">&quot;w&quot;</span><span class="p">),</span>
                  <span class="n">arrowprops</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">arrowstyle</span><span class="o">=</span><span class="s">&quot;-&gt;&quot;</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/annotate_simple_coord03.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord03.png">png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord03.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/annotate_simple_coord03.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/annotate_simple_coord03.png" src="../_images/annotate_simple_coord03.png" />
</div>
<p>You may take a look at this example <a class="reference internal" href="../examples/pylab_examples/annotation_demo3.html#pylab-examples-annotation-demo3"><em>pylab_examples example code: annotation_demo3.py</em></a>.</p>
</li>
</ol>
</div></blockquote>
</div>
<div class="section" id="using-connectorpatch">
<h2>Using ConnectorPatch<a class="headerlink" href="#using-connectorpatch" title="Permalink to this headline">¶</a></h2>
<p>The ConnectorPatch is like an annotation without a text.  While the
annotate function is recommended in most of situation, the
ConnectorPatch is useful when you want to connect points in different
axes.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">matplotlib.patches</span> <span class="kn">import</span> <span class="n">ConnectionPatch</span>
<span class="n">xy</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">)</span>
<span class="n">con</span> <span class="o">=</span> <span class="n">ConnectionPatch</span><span class="p">(</span><span class="n">xyA</span><span class="o">=</span><span class="n">xy</span><span class="p">,</span> <span class="n">xyB</span><span class="o">=</span><span class="n">xy</span><span class="p">,</span> <span class="n">coordsA</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span> <span class="n">coordsB</span><span class="o">=</span><span class="s">&quot;data&quot;</span><span class="p">,</span>
                      <span class="n">axesA</span><span class="o">=</span><span class="n">ax1</span><span class="p">,</span> <span class="n">axesB</span><span class="o">=</span><span class="n">ax2</span><span class="p">)</span>
<span class="n">ax2</span><span class="o">.</span><span class="n">add_artist</span><span class="p">(</span><span class="n">con</span><span class="p">)</span>
</pre></div>
</div>
<p>The above code connects point xy in data coordinate of <tt class="docutils literal"><span class="pre">ax1</span></tt> to
point xy int data coordinate of <tt class="docutils literal"><span class="pre">ax2</span></tt>. Here is a simple example.</p>
<p>(<a class="reference external" href="../users/plotting/examples/connect_simple01.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/connect_simple01.png">png</a>, <a class="reference external" href="../users/plotting/examples/connect_simple01.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/connect_simple01.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/connect_simple01.png" src="../_images/connect_simple01.png" />
</div>
<p>While the ConnectorPatch instance can be added to any axes, but you
may want it to be added to the axes in the latter (?) of the axes
drawing order to prevent overlap (?) by other axes.</p>
<div class="section" id="advanced-topics">
<h3>Advanced Topics<a class="headerlink" href="#advanced-topics" title="Permalink to this headline">¶</a></h3>
</div>
</div>
<div class="section" id="zoom-effect-between-axes">
<h2>Zoom effect between Axes<a class="headerlink" href="#zoom-effect-between-axes" title="Permalink to this headline">¶</a></h2>
<p>mpl_toolkits.axes_grid.inset_locator defines some patch classes useful
for interconnect two axes. Understanding the code requires some
knowledge of how mpl&#8217;s transform works. But, utilizing it will be
straight forward.</p>
<p>(<a class="reference external" href="../mpl_examples/pylab_examples/axes_zoom_effect.py">Source code</a>, <a class="reference external" href="../mpl_examples/pylab_examples/axes_zoom_effect.png">png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/axes_zoom_effect.hires.png">hires.png</a>, <a class="reference external" href="../mpl_examples/pylab_examples/axes_zoom_effect.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/axes_zoom_effect.png" src="../_images/axes_zoom_effect.png" />
</div>
</div>
<div class="section" id="define-custom-boxstyle">
<h2>Define Custom BoxStyle<a class="headerlink" href="#define-custom-boxstyle" title="Permalink to this headline">¶</a></h2>
<p>You can use a custom box style. The value for the <tt class="docutils literal"><span class="pre">boxstyle</span></tt> can be a
callable object in following forms.:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">mutation_size</span><span class="p">,</span>
             <span class="n">aspect_ratio</span><span class="o">=</span><span class="mf">1.</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    Given the location and size of the box, return the path of</span>
<span class="sd">    the box around it.</span>

<span class="sd">      - *x0*, *y0*, *width*, *height* : location and size of the box</span>
<span class="sd">      - *mutation_size* : a reference scale for the mutation.</span>
<span class="sd">      - *aspect_ratio* : aspect-ration for the mutation.</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">path</span> <span class="o">=</span> <span class="o">...</span>
    <span class="k">return</span> <span class="n">path</span>
</pre></div>
</div>
<p>Here is a complete example.</p>
<p>(<a class="reference external" href="../users/plotting/examples/custom_boxstyle01.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle01.png">png</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle01.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle01.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/custom_boxstyle01.png" src="../_images/custom_boxstyle01.png" />
</div>
<p>However, it is recommended that you derive from the
matplotlib.patches.BoxStyle._Base as demonstrated below.</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">matplotlib.path</span> <span class="kn">import</span> <span class="n">Path</span>
<span class="kn">from</span> <span class="nn">matplotlib.patches</span> <span class="kn">import</span> <span class="n">BoxStyle</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span>

<span class="c"># we may derive from matplotlib.patches.BoxStyle._Base class.</span>
<span class="c"># You need to overide transmute method in this case.</span>

<span class="k">class</span> <span class="nc">MyStyle</span><span class="p">(</span><span class="n">BoxStyle</span><span class="o">.</span><span class="n">_Base</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    A simple box.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mf">0.3</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        The arguments need to be floating numbers and need to have</span>
<span class="sd">        default values.</span>

<span class="sd">         *pad*</span>
<span class="sd">            amount of padding</span>
<span class="sd">        &quot;&quot;&quot;</span>

        <span class="bp">self</span><span class="o">.</span><span class="n">pad</span> <span class="o">=</span> <span class="n">pad</span>
        <span class="nb">super</span><span class="p">(</span><span class="n">MyStyle</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>

    <span class="k">def</span> <span class="nf">transmute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">mutation_size</span><span class="p">):</span>
        <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">        Given the location and size of the box, return the path of</span>
<span class="sd">        the box around it.</span>

<span class="sd">         - *x0*, *y0*, *width*, *height* : location and size of the box</span>
<span class="sd">         - *mutation_size* : a reference scale for the mutation.</span>

<span class="sd">        Often, the *mutation_size* is the font size of the text.</span>
<span class="sd">        You don&#39;t need to worry about the rotation as it is</span>
<span class="sd">        automatically taken care of.</span>
<span class="sd">        &quot;&quot;&quot;</span>

        <span class="c"># padding</span>
        <span class="n">pad</span> <span class="o">=</span> <span class="n">mutation_size</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">pad</span>

        <span class="c"># width and height with padding added.</span>
        <span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">width</span> <span class="o">+</span> <span class="mf">2.</span><span class="o">*</span><span class="n">pad</span><span class="p">,</span> \
                        <span class="n">height</span> <span class="o">+</span> <span class="mf">2.</span><span class="o">*</span><span class="n">pad</span><span class="p">,</span>

        <span class="c"># boundary of the padded box</span>
        <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span> <span class="o">=</span> <span class="n">x0</span><span class="o">-</span><span class="n">pad</span><span class="p">,</span> <span class="n">y0</span><span class="o">-</span><span class="n">pad</span><span class="p">,</span>
        <span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">x0</span><span class="o">+</span><span class="n">width</span><span class="p">,</span> <span class="n">y0</span> <span class="o">+</span> <span class="n">height</span>

        <span class="n">cp</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">),</span>
              <span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y0</span><span class="p">),</span> <span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span>
              <span class="p">(</span><span class="n">x0</span><span class="o">-</span><span class="n">pad</span><span class="p">,</span> <span class="p">(</span><span class="n">y0</span><span class="o">+</span><span class="n">y1</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span><span class="p">),</span> <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">),</span>
              <span class="p">(</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">)]</span>

        <span class="n">com</span> <span class="o">=</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">MOVETO</span><span class="p">,</span>
               <span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">,</span> <span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">,</span> <span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">,</span>
               <span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">,</span> <span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">,</span>
               <span class="n">Path</span><span class="o">.</span><span class="n">CLOSEPOLY</span><span class="p">]</span>

        <span class="n">path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">cp</span><span class="p">,</span> <span class="n">com</span><span class="p">)</span>

        <span class="k">return</span> <span class="n">path</span>


<span class="c"># register the custom style</span>
<span class="n">BoxStyle</span><span class="o">.</span><span class="n">_style_list</span><span class="p">[</span><span class="s">&quot;angled&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">MyStyle</span>

<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">))</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="s">&quot;Test&quot;</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">va</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s">&quot;center&quot;</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span>
        <span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s">&quot;angled,pad=0.5&quot;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.2</span><span class="p">))</span>

<span class="k">del</span> <span class="n">BoxStyle</span><span class="o">.</span><span class="n">_style_list</span><span class="p">[</span><span class="s">&quot;angled&quot;</span><span class="p">]</span>

<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
<p>(<a class="reference external" href="../users/plotting/examples/custom_boxstyle02.py">Source code</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle02.png">png</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle02.hires.png">hires.png</a>, <a class="reference external" href="../users/plotting/examples/custom_boxstyle02.pdf">pdf</a>)</p>
<div class="figure">
<img alt="../_images/custom_boxstyle02.png" src="../_images/custom_boxstyle02.png" />
</div>
<p>Similarly, you can define custom ConnectionStyle and custom ArrowStyle.
See the source code of <tt class="docutils literal"><span class="pre">lib/matplotlib/patches.py</span></tt> and check
how each style class is defined.</p>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="recipes.html" title="Our Favorite Recipes"
             >next</a> |</li>
        <li class="right" >
          <a href="path_tutorial.html" title="Path Tutorial"
             >previous</a> |</li>
        <li><a href="../index.html">home</a>|&nbsp;</li>
        <li><a href="../search.html">search</a>|&nbsp;</li>
        <li><a href="../examples/index.html">examples</a>|&nbsp;</li>
        <li><a href="../gallery.html">gallery</a>|&nbsp;</li>
        <li><a href="../contents.html">docs</a> &raquo;</li>

          <li><a href="index.html" >User&#8217;s Guide</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2008, John Hunter, Darren Dale, Michael Droettboom.
      Last updated on Oct 04, 2012.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
    </div>
  </body>
</html>