Revision: 8785
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8785&view=rev
Author:   jdh2358
Date:     2010-11-09 15:23:25 +0000 (Tue, 09 Nov 2010)

Log Message:
-----------
fix a bug in context so plot directive will be forced to run (but not save) 
figs which are already cached

Modified Paths:
--------------
    branches/v1_0_maint/doc/users/annotations_guide.rst
    branches/v1_0_maint/doc/users/gridspec.rst
    branches/v1_0_maint/doc/users/image_tutorial.rst
    branches/v1_0_maint/doc/users/recipes.rst
    branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py

Removed Paths:
-------------
    branches/v1_0_maint/examples/units/date_converter.py
    branches/v1_0_maint/examples/units/date_support.py

Modified: branches/v1_0_maint/doc/users/annotations_guide.rst
===================================================================
--- branches/v1_0_maint/doc/users/annotations_guide.rst 2010-11-09 07:46:54 UTC 
(rev 8784)
+++ branches/v1_0_maint/doc/users/annotations_guide.rst 2010-11-09 15:23:25 UTC 
(rev 8785)
@@ -310,6 +310,7 @@
     as 2.  The callable object should take a single argument of
     renderer instance. For example, following two commands give
     identical results ::
+
       an2 = ax.annotate("Test 2", xy=(1, 0.5), xycoords=an1,
                         xytext=(30,0), textcoords="offset points")
       an2 = ax.annotate("Test 2", xy=(1, 0.5), xycoords=an1.get_window_extent,
@@ -322,7 +323,7 @@
       annotate("Test", xy=(0.5, 1), xycoords=("data", "axes fraction"))
 
     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, 
+    You may use an atist or transform as with a tuple. For example,
 
     .. plot:: users/plotting/examples/annotate_simple_coord02.py
        :include-source:

Modified: branches/v1_0_maint/doc/users/gridspec.rst
===================================================================
--- branches/v1_0_maint/doc/users/gridspec.rst  2010-11-09 07:46:54 UTC (rev 
8784)
+++ branches/v1_0_maint/doc/users/gridspec.rst  2010-11-09 15:23:25 UTC (rev 
8785)
@@ -1,4 +1,4 @@
-.. _gridspec-guide:
+\.. _gridspec-guide:
 
 
 ************************************************
@@ -23,7 +23,7 @@
 ====================================
 
 To use subplot2grid, you provide geometry of the grid and the location
-of the subplot in the grid. For a simple single-cell subplot, ::
+of the subplot in the grid. For a simple single-cell subplot::
 
   ax = plt.subplot2grid((2,2),(0, 0))
 

Modified: branches/v1_0_maint/doc/users/image_tutorial.rst
===================================================================
--- branches/v1_0_maint/doc/users/image_tutorial.rst    2010-11-09 07:46:54 UTC 
(rev 8784)
+++ branches/v1_0_maint/doc/users/image_tutorial.rst    2010-11-09 15:23:25 UTC 
(rev 8785)
@@ -40,8 +40,7 @@
 Importing image data into Numpy arrays
 ===============================================
 
-Plotting image data is supported by the Python Image Library (`PIL
-<http://www.pythonware.com/products/pil/>`_), .  Natively, matplotlib
+Plotting image data is supported by the Python Image Library (`PIL 
<http://www.pythonware.com/products/pil/>`_), .  Natively, matplotlib
 only supports PNG images.  The commands shown below fall back on PIL
 if the native read fails.
 
@@ -122,8 +121,7 @@
 data.  Why 8 bits? Most displays can only render 8 bits per channel
 worth of color gradation.  Why can they only render 8 bits/channel?
 Because that's about all the human eye can see.  More here (from a
-photography standpoint): `Luminous Landscape bit depth tutorial
-<http://www.luminous-landscape.com/tutorials/bit-depth.shtml>`_.
+photography standpoint): `Luminous Landscape bit depth tutorial 
<http://www.luminous-landscape.com/tutorials/bit-depth.shtml>`_.
 
 Each inner list represents a pixel.  Here, with an RGB image, there
 are 3 values.  Since it's a black and white image, R, G, and B are all
@@ -179,8 +177,7 @@
 
     In [6]: lum_img = img[:,:,0]
 
-This is array slicing.  You can read more in the `Numpy tutorial
-<http://www.scipy.org/Tentative_NumPy_Tutorial>`_.
+This is array slicing.  You can read more in the `Numpy tutorial 
<http://www.scipy.org/Tentative_NumPy_Tutorial>`_.
 
 .. sourcecode:: ipython
 
@@ -229,9 +226,7 @@
         imgplot = plt.imshow(lum_img)
         imgplot.set_cmap('spectral')
 
-There are many other colormap schemes available.  See the `list and
-images of the colormaps
-<http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html>`_.
+There are many other colormap schemes available.  See the `list and images of 
the colormaps 
<http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html>`_.
 
 .. _Color Bars
 

Modified: branches/v1_0_maint/doc/users/recipes.rst
===================================================================
--- branches/v1_0_maint/doc/users/recipes.rst   2010-11-09 07:46:54 UTC (rev 
8784)
+++ branches/v1_0_maint/doc/users/recipes.rst   2010-11-09 15:23:25 UTC (rev 
8785)
@@ -56,21 +56,30 @@
 everything at once, and turn off x and y sharing for the whole bunch.
 You can either unpack the axes individually::
 
-  # new style method 1
-  fig, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2, sharex=True, sharey=True)
+  # new style method 1; unpack the axes
+  fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
   ax1.plot(x)
 
 or get them back as a numrows x numcolumns object array which supports
 numpy indexing::
 
-  # new style method 2
+  # new style method 2; use an axes array
   fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)
   axs[0,0].plot(x)
 
 
+
 Fixing common date annoyances
 =============================
 
+
+.. plot::
+   :nofigs:
+   :context:
+
+   # clear the state for context use below
+   plt.close('all')
+
 matplotlib allows you to natively plots python datetime instances, and
 for the most part does a good job picking tick locations and string
 formats.  There are a couple of things it does not handle so
@@ -97,13 +106,15 @@
 objects are datetime.date instances, which we can see when we print
 some samples in the ipython terminal window.
 
-If you plot the data, you will see that the x tick labels are all
-squashed together::
+If you plot the data, ::
 
   In [67]: plot(r.date, r.close)
   Out[67]: [<matplotlib.lines.Line2D object at 0x92a6b6c>]
 
+you will see that the x tick labels are all squashed together.
+
 .. plot::
+   :context:
 
    import matplotlib.cbook as cbook
    datafile = cbook.get_sample_data('goog.npy')
@@ -113,23 +124,22 @@
    plt.title('Default date handling can cause overlapping labels')
 
 Another annoyance is that if you hover the mouse over a the window and
-look in the lower right corner of the matplotlib toolbar at the x and
-y coordinates, you see that the x locations are formatted the same way
-the tick labels are, eg "Dec 2004".  What we'd like is for the
-location in the toolbar to have a higher degree of precision, eg
-giving us the exact date out mouse is hovering over.  To fix the first
-problem, we can use method:`matplotlib.figure.Figure.autofmt_xdate()`
-and to fix the second problem we can use the ``ax.fmt_xdata``
-attribute which can be set to any function that takes a position and
-returns a string.  matplotlib has a number of date formatters built
-im, so we'll use one of those.
+look in the lower right corner of the matplotlib toolbar
+(:ref:`navigation-toolbar`) at the x and y coordinates, you see that
+the x locations are formatted the same way the tick labels are, eg
+"Dec 2004".  What we'd like is for the location in the toolbar to have
+a higher degree of precision, eg giving us the exact date out mouse is
+hovering over.  To fix the first problem, we can use
+method:`matplotlib.figure.Figure.autofmt_xdate` and to fix the second
+problem we can use the ``ax.fmt_xdata`` attribute which can be set to
+any function that takes a scalar and returns a string.  matplotlib has
+a number of date formatters built in, so we'll use one of those.
 
 .. plot::
    :include-source:
+   :context:
 
-   import matplotlib.cbook as cbook
-   datafile = cbook.get_sample_data('goog.npy')
-   r = np.load(datafile).view(np.recarray)
+   plt.close('all')
    fig, ax = plt.subplots(1)
    ax.plot(r.date, r.close)
 
@@ -140,10 +150,10 @@
    # toolbar
    import matplotlib.dates as mdates
    ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
-   plt.title('autfmt_xdate fixes the labels')
+   plt.title('fig.autofmt_xdate fixes the labels')
 
 Now when you hover your mouse over the plotted data, you'll see date
-format strings like 2004-12-01.
+format strings like 2004-12-01 in the toolbar.
 
 Fill Between and Alpha
 ======================
@@ -154,7 +164,7 @@
 combine filling with logical ranges, eg to just fill in a curve over
 some threshold value.
 
-At it's most basic level, ``fill_between`` can be use to enhance a
+At its most basic level, ``fill_between`` can be use to enhance a
 graphs visual appearance. Let's compare two graphs of a financial
 times with a simple line plot on the left and a filled line on the
 right.
@@ -162,6 +172,9 @@
 .. plot::
    :include-source:
 
+   import matplotlib.pyplot as plt
+   import numpy as np
+
    import matplotlib.cbook as cbook
 
    # load up some sample financial data
@@ -180,6 +193,9 @@
        ax.grid(True)
 
    ax1.set_ylabel('price')
+   for label in ax2.get_yticklabels():
+       label.set_visible(False)
+
    fig.suptitle('Google (GOOG) daily closing price')
    fig.autofmt_xdate()
 
@@ -193,21 +209,24 @@
 
 Our next example computes two populations of random walkers with a
 different mean and standard deviation of the normal distributions from
-which there steps are drawn.  We use shared regions to plot +/- one
+which the steps are drawn.  We use shared regions to plot +/- one
 standard deviation of the mean position of the population.  Here the
 alpha channel is useful, not just aesthetic.
 
 .. plot::
    :include-source:
 
+   import matplotlib.pyplot as plt
+   import numpy as np
+
    Nsteps, Nwalkers = 100, 250
    t = np.arange(Nsteps)
 
-   # an Nsteps x Nwalkers array of random walk steps
+   # an (Nsteps x Nwalkers) array of random walk steps
    S1 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)
    S2 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
 
-   # an Nsteps x Nwalkers array of random walker positions
+   # an (Nsteps x Nwalkers) array of random walker positions
    X1 = S1.cumsum(axis=0)
    X2 = S2.cumsum(axis=0)
 
@@ -232,16 +251,16 @@
    ax.grid()
 
 
-The where keyword argument is very handy for highlighting certain
-regions of the graph.  Where takes a boolean mask the same length as
-the x, ymin and ymax arguments, and only fills in the region where the
-boolean mask is True.  In the example below, we take a a single random
-walker and compute the analytic mean and standard deviation of the
-population positions.  The population mean is shown as the black
+The ``where`` keyword argument is very handy for highlighting certain
+regions of the graph.  ``where`` takes a boolean mask the same length
+as the x, ymin and ymax arguments, and only fills in the region where
+the boolean mask is True.  In the example below, we simulate a single
+random walker and compute the analytic mean and standard deviation of
+the population positions.  The population mean is shown as the black
 dashed line, and the plus/minus one sigma deviation from the mean is
 showsn as the yellow filled region.  We use the where mask
-``X>upper_bound`` to find the region where the walker is above the
-one sigma boundary, and shade that region blue.
+``X>upper_bound`` to find the region where the walker is above the one
+sigma boundary, and shade that region blue.
 
 .. plot::
    :include-source:
@@ -258,7 +277,7 @@
    S = mu + sigma*np.random.randn(Nsteps)
    X = S.cumsum()
 
-   # the 1 sigma upper and lower population bounds
+   # the 1 sigma upper and lower analytic population bounds
    lower_bound = mu*t - sigma*np.sqrt(t)
    upper_bound = mu*t + sigma*np.sqrt(t)
 
@@ -323,9 +342,9 @@
 When decorating axes with text boxes, two useful tricks are to place
 the text in axes coordinates (see :ref:`transforms_tutorial`), so the
 text doesn't move around with changes in x or y limits.  You can also
-use the bbox property of text to surround the text with a
-:class:`~matplotlib.patches.Patch` instance -- the boox keyword argument
-takes a dictionary with keys that are Patch properties.
+use the ``bbox`` property of text to surround the text with a
+:class:`~matplotlib.patches.Patch` instance -- the ``bbox`` keyword
+argument takes a dictionary with keys that are Patch properties.
 
 .. plot::
    :include-source:

Deleted: branches/v1_0_maint/examples/units/date_converter.py
===================================================================
--- branches/v1_0_maint/examples/units/date_converter.py        2010-11-09 
07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/examples/units/date_converter.py        2010-11-09 
15:23:25 UTC (rev 8785)
@@ -1,20 +0,0 @@
-import date_support # set up the date converters
-import datetime
-from matplotlib.dates import drange
-from pylab import figure, show
-import numpy as np
-
-
-xmin = datetime.date(2007,1,1)
-xmax = datetime.date.today()
-delta = datetime.timedelta(days=1)
-xdates = drange(xmin, xmax, delta)
-
-fig = figure()
-fig.subplots_adjust(bottom=0.2)
-ax = fig.add_subplot(111)
-ax.plot(xdates, np.random.rand(len(xdates)), 'o')
-ax.set_xlim(datetime.date(2007,2,1), datetime.date(2007,3,1))
-
-fig.autofmt_xdate()
-show()

Deleted: branches/v1_0_maint/examples/units/date_support.py
===================================================================
--- branches/v1_0_maint/examples/units/date_support.py  2010-11-09 07:46:54 UTC 
(rev 8784)
+++ branches/v1_0_maint/examples/units/date_support.py  2010-11-09 15:23:25 UTC 
(rev 8785)
@@ -1,36 +0,0 @@
-import matplotlib
-matplotlib.rcParams['units'] = True
-from matplotlib.cbook import iterable, is_numlike
-import matplotlib.units as units
-import matplotlib.dates as dates
-import matplotlib.ticker as ticker
-import datetime
-
-class DateConverter(units.ConversionInterface):
-
-    @staticmethod
-    def axisinfo(unit, axis):
-        'return the unit AxisInfo'
-        if unit=='date':
-            majloc = dates.AutoDateLocator()
-            majfmt = dates.AutoDateFormatter(majloc)
-            return units.AxisInfo(
-                majloc = majloc,
-                majfmt = majfmt,
-                label='date',
-                )
-        else: return None
-
-    @staticmethod
-    def convert(value, unit, axis):
-        if units.ConversionInterface.is_numlike(value): return value
-        return dates.date2num(value)
-
-    @staticmethod
-    def default_units(x, axis):
-        'return the default unit for x or None'
-        return 'date'
-
-
-units.registry[datetime.date] = DateConverter()
-units.registry[datetime.datetime] = DateConverter()

Modified: branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py      
2010-11-09 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py      
2010-11-09 15:23:25 UTC (rev 8785)
@@ -210,6 +210,7 @@
 
     if plot_code is not None:
         exec_code = 'import numpy as np; import matplotlib.pyplot as 
plt\n%s'%plot_code
+        #print 'CONTEXT', context, plot_context, exec_code
         if context:
             exec(exec_code, None, plot_context)
         else:
@@ -279,6 +280,8 @@
     basedir, fname = os.path.split(plot_path)
     basename, ext = os.path.splitext(fname)
 
+
+
     all_exists = True
 
     # Look for single-figure output files first
@@ -288,7 +291,7 @@
             all_exists = False
             break
 
-    if all_exists:
+    if not context and all_exists:
         return 1
 
     # Then look for multi-figure output files, assuming
@@ -307,7 +310,7 @@
         else:
             break
 
-    if i != 0:
+    if not context and i != 0:
         return i
 
     # We didn't find the files, so build them
@@ -321,13 +324,17 @@
         warnings.warn(s, PlotWarning)
         return 0
 
-    num_figs = run_savefig(plot_path, basename, tmpdir, destdir, formats)
+    if not all_exists:
+        num_figs = run_savefig(plot_path, basename, tmpdir, destdir, formats)
 
-    if '__plot__' in sys.modules:
-        del sys.modules['__plot__']
+        if '__plot__' in sys.modules:
+            del sys.modules['__plot__']
 
-    return num_figs
+        return num_figs
+    else:
+        return 1
 
+
 def _plot_directive(plot_path, basedir, function_name, plot_code, caption,
                     options, state_machine):
     context = options.has_key('context')


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to