Sophie

Sophie

distrib > Mandriva > current > i586 > by-pkgid > ae0a4f27f26602dc31c3bf35e18b5b19 > files > 752

python-enthought-chaco-3.4.0-2mdv2010.2.i586.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>About the Chaco Scales package &mdash; Chaco v3.4.0 documentation</title>
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '3.4.0',
        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="shortcut icon" href="_static/et.ico"/>
    <link rel="top" title="Chaco v3.4.0 documentation" href="index.html" />
    <link rel="up" title="Tech Notes" href="tech_notes.html" />
    <link rel="prev" title="Tech Notes" href="tech_notes.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="tech_notes.html" title="Tech Notes"
             accesskey="P">previous</a></li>
        <li><a href="index.html">Chaco v3.4.0 documentation</a> &raquo;</li>
          <li><a href="tech_notes.html" accesskey="U">Tech Notes</a> &raquo;</li>
  
    <li><a href="#">About the Chaco Scales package</a></li>
  

      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="about-the-chaco-scales-package">
<h1>About the Chaco Scales package<a class="headerlink" href="#about-the-chaco-scales-package" title="Permalink to this headline">ΒΆ</a></h1>
<p>In the summer of 2007, I spent a few weeks working through the axis
ticking and labelling problem.  The basic goal was that I wanted to
create a flexible ticking system that would produce nicely-spaced axis
labels for arbitrary sets of labels <em>and</em> arbitrary intervals.  The
chaco2.scales package is the result of this effort.  It is an entirely
standalone package that does not import from any other Enthought
package (not even traits!), and the idea was that it could be used in
other plotting packages as well.</p>
<p>The overall idea is that you create a ScaleSystem consisting of
various Scales.  When the ScaleSystem is presented with a data range
(low,high) and a screen space amount, it searches through its list of
scales for the scale that produces the &#8220;nicest&#8221; set of labels.  It
takes into account whitespace, the formatted size of labels produced
by each scale in the ScaleSystem, etc.  So, the basic numerical Scales
defined in scales.py are:</p>
<ul class="simple">
<li>FixedScale: Simple scale with a fixed interval; places ticks at
multiples of the resolution</li>
<li>DefaultScale: Scale that tries to place ticks at 1,2,5, and 10 so  that
ticks don&#8217;t &#8220;pop&#8221; or suddenly jump when the resolution changes  (when
zooming)</li>
<li>LogScale: Dynamic scale that only produces ticks and labels that  work
well when doing logarithmic plots</li>
</ul>
<p>By comparison, the default ticking logic in DefaultTickGenerator (in
ticks.py) is basically just the DefaultScale.  (This is currently the
default tick generator used by PlotAxis.)</p>
<p>In time_scale.py, I define an additional scale, the TimeScale.
TimeScale not only handles time-oriented data using units of uniform
interval (microseconds up to days and weeks), it also handles non-
uniform calendar units like &#8220;day of the month&#8221; and &#8220;month of the
year&#8221;.  So, you can tell Chaco to generate ticks on the 1st of every
month, and it will give you non-uniformly spaced tick and grid lines.</p>
<p>The scale system mechanism is configurable, so although all of the
examples use the CalendarScaleSystem, you don&#8217;t have to use it.  In
fact, if you look at CalendarScaleSystem.__init__, it just initializes
its list of scales with <tt class="docutils literal"><span class="pre">HMSScales</span> <span class="pre">+</span> <span class="pre">MDYScales</span></tt>:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">HMSScales</span> <span class="o">=</span> <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">microseconds</span><span class="o">=</span><span class="mi">1</span><span class="p">),</span> <span class="n">TimeScale</span><span class="p">(</span><span class="n">milliseconds</span><span class="o">=</span><span class="mi">1</span><span class="p">)]</span> <span class="o">+</span> \
           <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="n">dt</span><span class="p">)</span> <span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">30</span><span class="p">)]</span> <span class="o">+</span> \
           <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">minutes</span><span class="o">=</span><span class="n">dt</span><span class="p">)</span> <span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">15</span><span class="p">,</span> <span class="mi">30</span><span class="p">)]</span> <span class="o">+</span> \
           <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">hours</span><span class="o">=</span><span class="n">dt</span><span class="p">)</span> <span class="k">for</span> <span class="n">dt</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">12</span><span class="p">,</span> <span class="mi">24</span><span class="p">)]</span>

<span class="n">MDYScales</span> <span class="o">=</span> <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">day_of_month</span><span class="o">=</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">31</span><span class="p">,</span><span class="mi">3</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">day_of_month</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">22</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">day_of_month</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">15</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">month_of_year</span><span class="o">=</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">13</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">month_of_year</span><span class="o">=</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">3</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">month_of_year</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">7</span><span class="p">)),</span>
            <span class="n">TimeScale</span><span class="p">(</span><span class="n">month_of_year</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span><span class="p">,))]</span>
</pre></div>
</div>
<p>So, if you wanted to create your own ScaleSystem with days, weeks, and
whatnot, you could do:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">ExtendedScales</span> <span class="o">=</span> <span class="n">HSMScales</span> <span class="o">+</span> <span class="p">[</span><span class="n">TimeScale</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="n">n</span><span class="p">)</span> <span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">14</span><span class="p">,</span><span class="mi">28</span><span class="p">)]</span>
<span class="n">MyScaleSystem</span> <span class="o">=</span> <span class="n">CalendarScaleSystem</span><span class="p">(</span><span class="o">*</span><span class="n">ExtendedScales</span><span class="p">)</span>
</pre></div>
</div>
<p>To use the Scales package in your Chaco plots, just import <tt class="xref py py-class docutils literal"><span class="pre">PlotAxis</span></tt> from
<tt class="xref py py-mod docutils literal"><span class="pre">chaco2.scales_axis</span></tt> instead of <tt class="xref py py-mod docutils literal"><span class="pre">chaco2.axis</span></tt>.  You will still need to create a
<tt class="xref py py-class docutils literal"><span class="pre">ScalesTickGenerator</span></tt> and pass it in.  The financial_plot_dates.py demo is a
good example of how to do this.</p>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="index.html">
              <img class="logo" src="_static/e-logo-rev.png" alt="Logo"/>
            </a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="_sources/scales.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="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="tech_notes.html" title="Tech Notes"
             >previous</a></li>
        <li><a href="index.html">Chaco v3.4.0 documentation</a> &raquo;</li>
          <li><a href="tech_notes.html" >Tech Notes</a> &raquo;</li>
  
    <li><a href="#">About the Chaco Scales package</a></li>
  

      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2008, Enthought, Inc..
      Last updated on Mar 02, 2011.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
    </div>
  </body>
</html>