class YearLocator(DateLocator): """ Make ticks on a given day of each year that is a multiple of base. Examples: # Tick every year on Jan 1st locator = YearLocator() # Tick every 5 years on July 4th locator = YearLocator(5, month=7, day=4) """ def __init__(self, base=1, month=1, day=1, tz=None): """ mark years that are multiple of base on a given month and day (default jan 1) """ DateLocator.__init__(self, tz) self.base = Base(base) self.replaced = { 'month' : month, 'day' : day, 'hour' : 0, 'minute' : 0, 'second' : 0, 'tzinfo' : tz } def __call__(self): self.verify_intervals() dmin, dmax = self.viewlim_to_dt() ymin = self.base.le(dmin.year) ymax = self.base.ge(dmax.year) #print 'DMIN', num2date(dmin, tz).strftime(fmt) #print 'DMAX', num2date(dmax, tz).strftime(fmt) ticks = [dmin.replace(year=ymin, **self.replaced)] while 1: dt = ticks[-1] if dt.year>=ymax: return date2num(ticks) year = dt.year + self.base.get_base() ticks.append(dt.replace(year=year, **self.replaced)) def autoscale(self): """ Set the view limits to include the data range """ self.verify_intervals() dmin, dmax = self.datalim_to_dt() ymin = self.base.le(dmin.year) ymax = self.base.ge(dmax.year) vmin = dmin.replace(year=ymin, **self.replaced) vmax = dmax.replace(year=ymax, **self.replaced) vmin = date2num(vmin) vmax = date2num(vmax) return self.nonsingular(vmin, vmax)
class YearLocator(DateLocator): """ Make ticks on a given day of each year that is a multiple of base. Examples: # Tick every year on Jan 1st locator = YearLocator() # Tick every 5 years on July 4th locator = YearLocator(5, month=7, day=4) """ def __init__(self, base=1, month=1, day=1, tz=None): """ mark years that are multiple of base on a given month and day (default jan 1) """ DateLocator.__init__(self, tz) self.base = Base(base) self.replaced = { 'month': month, 'day': day, 'hour': 0, 'minute': 0, 'second': 0, 'tzinfo': tz } def __call__(self): self.verify_intervals() dmin, dmax = self.viewlim_to_dt() ymin = self.base.le(dmin.year) ymax = self.base.ge( dmax.year) #print 'DMIN', num2date(dmin, tz).strftime(fmt) #print 'DMAX', num2date(dmax, tz).strftime(fmt) ticks = [dmin.replace(year=ymin, **self.replaced)] while 1: dt = ticks[-1] if dt.year >= ymax: return date2num(ticks) year = dt.year + self.base.get_base() ticks.append(dt.replace(year=year, **self.replaced)) def autoscale(self): """ Set the view limits to include the data range """ self.verify_intervals() dmin, dmax = self.datalim_to_dt() ymin = self.base.le(dmin.year) ymax = self.base.ge(dmax.year) vmin = dmin.replace(year=ymin, **self.replaced) vmax = dmax.replace(year=ymax, **self.replaced) vmin = date2num(vmin) vmax = date2num(vmax) return self.nonsingular(vmin, vmax)
def __init__(self, base=1, month=1, day=1, tz=None): """ mark years that are multiple of base on a given month and day (default jan 1) """ DateLocator.__init__(self, tz) self.base = Base(base) self.replaced = { 'month' : month, 'day' : day, 'hour' : 0, 'minute' : 0, 'second' : 0, 'tzinfo' : tz }