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

scipy-svn at scipy.org scipy-svn at scipy.org
Wed Feb 21 20:58:38 EST 2007


Author: pierregm
Date: 2007-02-21 19:58:34 -0600 (Wed, 21 Feb 2007)
New Revision: 2742

Modified:
   trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries_pgm.py
Log:
mpl_timeseries: _daily_finder: fixed a pb w/ daily/business freqs

Modified: trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries_pgm.py
===================================================================
--- trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries_pgm.py	2007-02-22 00:43:49 UTC (rev 2741)
+++ trunk/Lib/sandbox/timeseries/plotlib/mpl_timeseries_pgm.py	2007-02-22 01:58:34 UTC (rev 2742)
@@ -161,7 +161,7 @@
     return (current - previous).nonzero()[0]
 
 
-def _daily_finder(locs, freqstr, aslocator):
+def _daily_finder(vmin, vmax, freqstr, aslocator):
 
     if freqstr == 'B': 
         periodsperyear = 261
@@ -170,16 +170,14 @@
     else: 
         raise ValueError("unexpected frequency")
 
-    locs = N.asarray(locs)
-    (vmin, vmax) = locs[[0,-1]]
+    (vmin, vmax) = (int(vmin), int(vmax))
     span = vmax - vmin + 1
     dates = date_array(start_date=Date(freqstr,vmin), 
                        end_date=Date(freqstr, vmax))
+    default = N.arange(vmin, vmax+1) 
     # Initialize the output
-    if aslocator:
-        default = N.arange(vmin, vmax+1) 
-    else: #asformatter
-        format = N.empty(locs.size, dtype="|S8")
+    if not aslocator:
+        format = N.empty(default.shape, dtype="|S10")
         format.flat = ''
     # Case 1. Less than a month
     if span <= (periodsperyear//12 - 2):
@@ -200,7 +198,7 @@
                         idx = 0
                     format[idx] = '%d\n%b\n%Y'
                 else:
-                    format[month_break[0]] = '%d\n%b\n%Y'
+                    format[month_start[0]] = '%d\n%b\n%Y'
     # Case 2. Less than three months        
     elif span <= periodsperyear//4:
         month_start = period_break(dates,'month')
@@ -210,22 +208,17 @@
         else:
             week_start = (dates.day_of_week == 1)
             year_start = period_break(dates,'year')
-            
-            week_start[0] = False
-            month_start[0] = False
-            year_start[0] = False
-
+#            week_start[0] = False
+#            month_start[0] = False
+#            year_start[0] = False
             format[week_start] = '%d'
             format[month_start] = '\n\n%b'
             format[year_start] = '\n\n%b\n%Y'
-
             if year_start.size == 0:
-                month_break = month_start.nonzero()[0]
-                if month_break.size == 0:
-                    week_break = week_start.nonzero()[0]
-                    format[week_break[0]] = '\n\n%b\n%Y'
+                if month_start.size == 0:
+                    format[week_start[0]] = '\n\n%b\n%Y'
                 else:
-                    format[month_break[0]] = '\n\n%b\n%Y'
+                    format[month_start[0]] = '\n\n%b\n%Y'
     # Case 3. Less than 14 months ...............
     elif span <= 1.15 * periodsperyear:
         month_start = period_break(dates,'month')
@@ -242,7 +235,7 @@
             format[month_start] = '%b'
             format[year_start] = '%b\n%Y'
             if not year_start.size:
-                format[month_break[0]] = '%b\n%Y'
+                format[month_start[0]] = '%b\n%Y'
     # Case 4. Less than 2.5 years ...............
     elif span <= 2.5 * periodsperyear:
         year_start = period_break(dates,'year')
@@ -293,14 +286,12 @@
         return minor, major
     else:
         formatted = (format != '')
-        return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
+        return dict([(d,f) for (d,f) in zip(default[formatted],format[formatted])])
 #...............................................................................
-def _monthly_finder(locs, freqstr, aslocator):
+def _monthly_finder(vmin, vmax, freqstr, aslocator):
     if freqstr != 'M': 
         raise ValueError("unexpected frequency")
     periodsperyear = 12
-    locs = N.asarray(locs)
-    (vmin, vmax) = locs[[0,-1]]    
     (vmin, vmax) = (int(vmin), int(vmax+1))
     span = vmax - vmin + 1
     #............................................
@@ -367,12 +358,10 @@
         formatted = (format != '')
         return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
 #...............................................................................
-def _quarterly_finder(locs, freqstr, aslocator):
+def _quarterly_finder(vmin, vmax, freqstr, aslocator):
     if freqstr != 'Q': 
         raise ValueError("unexpected frequency")
-    periodsperyear = 4
-    locs = N.asarray(locs)
-    (vmin, vmax) = locs[[0,-1]]    
+    periodsperyear = 4  
     (vmin, vmax) = (int(vmin), int(vmax+1))
     span = vmax - vmin + 1
     #............................................
@@ -420,11 +409,9 @@
         formatted = (format != '')
         return dict([(d,f) for (d,f) in zip(dates[formatted],format[formatted])])
 #...............................................................................
-def _annual_finder(locs, freqstr, aslocator):
+def _annual_finder(vmin, vmax, freqstr, aslocator):
     if freqstr != 'Q': 
-        raise ValueError("unexpected frequency")
-    locs = N.asarray(locs)
-    (vmin, vmax) = locs[[0,-1]]    
+        raise ValueError("unexpected frequency")   
     (vmin, vmax) = (int(vmin), int(vmax+1))
     span = vmax - vmin + 1
     #............................................
@@ -465,7 +452,7 @@
             self.finder = _quarterly_finder
         elif freq == 'M':
             self.finder = _monthly_finder
-        elif freq == 'D':
+        elif freq in 'BD':
             self.finder = _daily_finder
             
     def asminor(self):
@@ -480,7 +467,7 @@
     
     def _get_default_locs(self, vmin, vmax):
         "Returns the default locations of ticks."
-        (minor, major) = self.finder(N.arange(vmin, vmax+1), self.freqstr, True)
+        (minor, major) = self.finder(vmin, vmax, self.freqstr, True)
         if self.isminor:
             return minor
         return major
@@ -534,7 +521,7 @@
             self.finder = _quarterly_finder
         elif freq == 'M':
             self.finder = _monthly_finder
-        elif freq == 'D':
+        elif freq in 'BD':
             self.finder = _daily_finder
             
     def asminor(self):
@@ -549,7 +536,7 @@
     
     def _set_default_format(self, vmin, vmax):
         "Returns the default ticks spacing."
-        self.formatdict = self.finder(self.locs, self.freqstr, False)
+        self.formatdict = self.finder(vmin, vmax, self.freqstr, False)
         return self.formatdict
     
     def set_locs(self, locs):
@@ -814,10 +801,10 @@
 ################################################################################
 if __name__ == '__main__':
 
-    da = date_array(start_date=Date(freq='M', year=2003, quarter=3, month=1, day=17), 
-                    length=51)
+    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[4] = MA.masked
 #    ser_2 = timeseries.time_series(MA.arange(len(da)), dates=da.asfreq('Q'))
     
     pylab.figure()




More information about the Scipy-svn mailing list