[Scipy-svn] r2858 - trunk/Lib/sandbox/timeseries/plotlib

scipy-svn at scipy.org scipy-svn at scipy.org
Tue Mar 20 13:48:22 EDT 2007


Author: mattknox_ca
Date: 2007-03-20 12:48:13 -0500 (Tue, 20 Mar 2007)
New Revision: 2858

Modified:
   trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries.py
Log:
updated to work with new location of frequency constants

Modified: trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries.py
===================================================================
--- trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries.py	2007-03-20 17:47:42 UTC (rev 2857)
+++ trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries.py	2007-03-20 17:48:13 UTC (rev 2858)
@@ -34,6 +34,7 @@
 import timeseries
 import timeseries as TS
 from timeseries import date_array, Date, DateArray, TimeSeries
+from timeseries import const as _c
 
 import warnings
 
@@ -65,13 +66,13 @@
         key.__hash__()
     except TypeError:
         key = str(key)
-    #        
+    #
     if figure_instance._seen.has_key(key):
         ax = figure_instance._seen[key]
         figure_instance.sca(ax)
         return ax
     #
-    if not len(args): 
+    if not len(args):
         return
 #    if hasattr(args[0], '__array__'):
 #        fixedargs = args[1:]
@@ -90,7 +91,7 @@
             a = PolarSubplot(figure_instance, *args, **kwargs)
         else:
             a = SubplotClass(figure_instance, *args, **kwargs)
-            
+
     figure_instance.axes.append(a)
     figure_instance._axstack.push(a)
     figure_instance.sca(a)
@@ -130,17 +131,17 @@
 
 def _get_default_annual_spacing(nyears):
     """Returns a default spacing between consecutive ticks for annual data."""
-    if nyears < 11: 
+    if nyears < 11:
         (min_spacing, maj_spacing) = (1, 1)
-    elif nyears < 20: 
+    elif nyears < 20:
         (min_spacing, maj_spacing) = (1, 2)
-    elif nyears < 50: 
+    elif nyears < 50:
         (min_spacing, maj_spacing) = (1, 5)
-    elif nyears < 100: 
+    elif nyears < 100:
         (min_spacing, maj_spacing) = (5, 10)
-    elif nyears < 200: 
+    elif nyears < 200:
         (min_spacing, maj_spacing) = (5, 25)
-    elif nyears < 600: 
+    elif nyears < 600:
         (min_spacing, maj_spacing) = (10, 50)
     else:
         factor = nyears // 1000 + 1
@@ -172,18 +173,18 @@
 
 def _daily_finder(vmin, vmax, freq, aslocator):
 
-    if freq == TS.FR_BUS: 
+    if freq == _c.FR_BUS:
         periodsperyear = 261
-    elif freq == TS.FR_DAY: 
+    elif freq == _c.FR_DAY:
         periodsperyear = 365
-    else: 
+    else:
         raise ValueError("unexpected frequency")
 
     (vmin, vmax) = (int(vmin), int(vmax))
     span = vmax - vmin + 1
-    dates = date_array(start_date=Date(freq,vmin), 
+    dates = date_array(start_date=Date(freq,vmin),
                        end_date=Date(freq, vmax))
-    default = N.arange(vmin, vmax+1) 
+    default = N.arange(vmin, vmax+1)
     # Initialize the output
     if not aslocator:
         format = N.empty(default.shape, dtype="|S10")
@@ -206,14 +207,14 @@
             format[year_start] = '%d\n%b\n%Y'
             if not has_level_label(year_start):
                 if not has_level_label(month_start):
-                    if dates.size > 1: 
+                    if dates.size > 1:
                         idx = 1
-                    else: 
+                    else:
                         idx = 0
                     format[idx] = '%d\n%b\n%Y'
                 else:
                     format[first_label(month_start)] = '%d\n%b\n%Y'
-    # Case 2. Less than three months        
+    # Case 2. Less than three months
     elif span <= periodsperyear//4:
         month_start = period_break(dates,'month')
         if aslocator:
@@ -233,7 +234,7 @@
                     format[first_label(month_start)] = '\n\n%b\n%Y'
     # Case 3. Less than 14 months ...............
     elif span <= 1.15 * periodsperyear:
-        
+
         if aslocator:
             d_minus_1 = dates-1
 
@@ -304,14 +305,14 @@
         return dict([(d,f) for (d,f) in zip(default[formatted],format[formatted])])
 #...............................................................................
 def _monthly_finder(vmin, vmax, freq, aslocator):
-    if freq != TS.FR_MTH: 
+    if freq != _c.FR_MTH:
         raise ValueError("unexpected frequency")
     periodsperyear = 12
 
     (vmin, vmax) = (int(vmin), int(vmax))
     span = vmax - vmin + 1
     #............................................
-    dates = N.arange(vmin, vmax+1) 
+    dates = N.arange(vmin, vmax+1)
     format = N.empty(span, dtype="|S8")
     format.flat = ''
     year_start = (dates % 12 == 1).nonzero()[0]
@@ -321,14 +322,14 @@
             major = dates[year_start]
             minor = dates
         else:
-            
+
             format[:] = '%b'
             format[year_start] = '%b\n%Y'
 
             if not has_level_label(year_start):
-                if dates.size > 1: 
+                if dates.size > 1:
                     idx = 1
-                else: 
+                else:
                     idx = 0
                 format[idx] = '%b\n%Y'
     #........................
@@ -357,7 +358,7 @@
             minor = dates[quarter_start]
         else:
             format[year_start] = '%Y'
-   #......................... 
+   #.........................
     else:
         nyears = span/periodsperyear
         (min_anndef, maj_anndef) = _get_default_annual_spacing(nyears)
@@ -376,13 +377,13 @@
         return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
 #...............................................................................
 def _quarterly_finder(vmin, vmax, freq, aslocator):
-    if freq != TS.FR_QTR: 
+    if freq != _c.FR_QTR:
         raise ValueError("unexpected frequency")
-    periodsperyear = 4  
+    periodsperyear = 4
     (vmin, vmax) = (int(vmin), int(vmax))
     span = vmax - vmin + 1
     #............................................
-    dates = N.arange(vmin, vmax+1) 
+    dates = N.arange(vmin, vmax+1)
     format = N.empty(span, dtype="|S8")
     format.flat = ''
     year_start = (dates % 4 == 1).nonzero()[0]
@@ -395,9 +396,9 @@
             format[:] = 'Q%q'
             format[year_start] = 'Q%q\n%Y'
             if not has_level_label(year_start):
-                if dates.size > 1: 
+                if dates.size > 1:
                     idx = 1
-                else: 
+                else:
                     idx = 0
                 format[idx] = 'Q%q\n%Y'
     #............................................
@@ -426,12 +427,12 @@
         return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
 #...............................................................................
 def _annual_finder(vmin, vmax, freq, aslocator):
-    if TS.get_freq_group(freq) != TS.FR_ANN: 
-        raise ValueError("unexpected frequency")   
+    if TS.get_freq_group(freq) != _c.FR_ANN:
+        raise ValueError("unexpected frequency")
     (vmin, vmax) = (int(vmin), int(vmax+1))
     span = vmax - vmin + 1
     #............................................
-    dates = N.arange(vmin, vmax+1) 
+    dates = N.arange(vmin, vmax+1)
     format = N.empty(span, dtype="|S8")
     format.flat = ''
     #............................................
@@ -448,7 +449,7 @@
     else:
         formatted = (format != '')
         return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
-    
+
 #...............................................................................
 class TimeSeries_DateLocator(Locator):
     "Locates the ticks along an axis controlled by a DateArray."
@@ -463,32 +464,32 @@
         self.isdynamic = dynamic_mode
         self.offset = 0
         #.....
-        if fgroup == TS.FR_ANN:
+        if fgroup == _c.FR_ANN:
             self.finder = _annual_finder
-        elif freq == TS.FR_QTR:
+        elif freq == _c.FR_QTR:
             self.finder = _quarterly_finder
-        elif freq == TS.FR_MTH:
+        elif freq == _c.FR_MTH:
             self.finder = _monthly_finder
-        elif freq in (TS.FR_BUS, TS.FR_DAY):
+        elif freq in (_c.FR_BUS, _c.FR_DAY):
             self.finder = _daily_finder
-            
+
     def asminor(self):
         "Returns the locator set to minor mode."
         self.isminor = True
         return self
-    
+
     def asmajor(self):
         "Returns the locator set to major mode."
         self.isminor = False
         return self
-    
+
     def _get_default_locs(self, vmin, vmax):
         "Returns the default locations of ticks."
         (minor, major) = self.finder(vmin, vmax, self.freq, True)
         if self.isminor:
             return minor
         return major
-    
+
     def __call__(self):
         'Return the locations of the ticks.'
         self.verify_intervals()
@@ -503,9 +504,9 @@
             vmin = (d+1) * base
             locs = range(vmin, vmax+1, base)
         return locs
-    
+
     def autoscale(self):
-        """Sets the view limits to the nearest multiples of base that contain 
+        """Sets the view limits to the nearest multiples of base that contain
     the data.
         """
         self.verify_intervals()
@@ -515,14 +516,14 @@
         if vmin == vmax:
             vmin -= 1
             vmax += 1
-        return nonsingular(vmin, vmax)      
+        return nonsingular(vmin, vmax)
 
 #####---------------------------------------------------------------------------
 #---- --- Formatter ---
-#####---------------------------------------------------------------------------            
+#####---------------------------------------------------------------------------
 class TimeSeries_DateFormatter(Formatter):
     """Formats the ticks along a DateArray axis."""
-    
+
     def __init__(self, freq, minor_locator=False, dynamic_mode=True,):
         self.format = None
         self.freq = freq
@@ -533,30 +534,30 @@
         self.offset = 0
         fgroup = TS.get_freq_group(freq)
         #.....
-        if fgroup == TS.FR_ANN:
+        if fgroup == _c.FR_ANN:
             self.finder = _annual_finder
-        elif freq == TS.FR_QTR:
+        elif freq == _c.FR_QTR:
             self.finder = _quarterly_finder
-        elif freq == TS.FR_MTH:
+        elif freq == _c.FR_MTH:
             self.finder = _monthly_finder
-        elif freq in (TS.FR_BUS, TS.FR_DAY):
+        elif freq in (_c.FR_BUS, _c.FR_DAY):
             self.finder = _daily_finder
-            
+
     def asminor(self):
         "Returns the formatter set to minor mode."
         self.isminor = True
         return self
-    
+
     def asmajor(self):
         "Returns the fromatter set to major mode."
         self.isminor = False
         return self
-    
+
     def _set_default_format(self, vmin, vmax):
         "Returns the default ticks spacing."
         self.formatdict = self.finder(vmin, vmax, self.freq, False)
         return self.formatdict
-    
+
     def set_locs(self, locs):
         'Sets the locations of the ticks'
         self.locs = locs
@@ -574,10 +575,10 @@
         else:
             retval = ''
         return retval
-    
 
 
 
+
 #####--------------------------------------------------------------------------
 #---- --- TimeSeries plots ---
 #####--------------------------------------------------------------------------
@@ -590,11 +591,11 @@
 :Parameters:
     `fig` : Figure
         Base figure.
-        
+
 :Keywords:
     `series` : TimeSeries
         Data to plot
-        
+
         """
         # Retrieve the series ...................
         _series = kwargs.pop('series',None)
@@ -609,13 +610,13 @@
             self.xdata = _series.dates
             self.freq = _series.dates.freq
             self.xaxis.set_major_locator
-            
+
         else:
             self._series = None
             self.xdata = None
             self.freq = None
         self._austoscale = False
-        # Get the data to plot 
+        # Get the data to plot
         self.legendsymbols = []
         self.legendlabels = []
     #............................................
@@ -631,7 +632,7 @@
         """Gets the base time series."""
         return self._series
     ydata = property(fget=get_ydata, fset=set_ydata, doc='Time series')
-    #............................................    
+    #............................................
     def _check_plot_params(self,*args):
         """Defines the plot coordinates (and basic plotting arguments)."""
         remaining = list(args)
@@ -679,7 +680,7 @@
                         else:
                             output.extend([a, self.ydata])
                     #... and it must be some data
-                    else:   
+                    else:
                         b = remaining.pop(0)
                         if len(remaining) > 0:
                             if isinstance(remaining[0], str):
@@ -719,20 +720,20 @@
         parms = self._check_plot_params(*parms)
         self.legendlabels.append(kwargs.get('label',None))
         Subplot.plot(self, *parms,**kwargs)
-    #............................................       
-    def format_dateaxis(self,maj_spacing=None, min_spacing=None, 
+    #............................................
+    def format_dateaxis(self,maj_spacing=None, min_spacing=None,
                         strformat="%Y", rotate=True):
         """Pretty-formats the date axis (x-axis).
-        
+
 :Parameters:
-    `major` : Integer *[5]* 
+    `major` : Integer *[5]*
         Major tick locator, in years (major tick every `major` years).
-    `minor` : Integer *[12]* 
+    `minor` : Integer *[12]*
         Minor tick locator, in months (minor ticks every `minor` months).
     `strformat` : String *['%Y']*
         String format for major ticks ("%Y").
         """
-        # Get the locator class ................. 
+        # Get the locator class .................
         majlocator = TimeSeries_DateLocator(self.freq, dynamic_mode=True,
                                             minor_locator=False)
         minlocator = TimeSeries_DateLocator(self.freq, dynamic_mode=True,
@@ -759,7 +760,7 @@
 
 #####--------------------------------------------------------------------------
 #---- --- TimeSeries Figures ---
-#####--------------------------------------------------------------------------        
+#####--------------------------------------------------------------------------
 class TimeSeriesFigure(Figure):
     """Time Series Figure: all subplots share the same time series.
     """
@@ -773,14 +774,14 @@
     def add_tsplot(self, *args, **kwargs):
         """Adds a `TimeSeriesPlot` subplot to the figure."""
         kwargs.update(SubplotClass=TimeSeriesPlot,
-                      series=self._series)        
+                      series=self._series)
         return add_generic_subplot(self, *args, **kwargs)
     add_plot = add_tsplot
 TSFigure = TimeSeriesFigure
 #................................................
-def tsfigure(series, **figargs):    
+def tsfigure(series, **figargs):
     """Creates a new `TimeSeriesFigure` object.
-    
+
 :Parameters:
     `series` : TimeSeries object
         Input data.
@@ -798,8 +799,8 @@
         kwargs['series'] = None
     return add_generic_subplot(axes, *args, **kwargs)
 Figure.add_tsplot = add_tsplot
-    
 
+
 def tsplot(*args, **kwargs):
     # allow callers to override the hold state by passing hold=True|False
     b = pylab.ishold()
@@ -819,16 +820,15 @@
 ################################################################################
 if __name__ == '__main__':
 
-    da = date_array(start_date=Date(freq='B', year=2003, quarter=3, month=1, day=17), 
+    da = date_array(start_date=Date(freq='B', year=2003, quarter=3, month=1, day=17),
                     length=10)
     ser = timeseries.time_series(MA.arange(len(da)), dates=da)
 #    ser[4] = MA.masked
 #    ser_2 = timeseries.time_series(MA.arange(len(da)), dates=da.asfreq('Q'))
-    
+
     pylab.figure()
     pylab.gcf().add_tsplot(111)
     pylab.gca().tsplot(ser, 'ko-')
     pylab.gca().format_dateaxis()
 #    pylab.gca().tsplot(ser_2, 'rs')
     pylab.show()
-    
\ No newline at end of file




More information about the Scipy-svn mailing list