Hi all, I'm passing in "None" for the timezone in AutoDateFormatter.
What I am getting is "UTC", but what I want is nothing. Looking at the code, I see lines like: self._formatter = DateFormatter("%H:%M:%S %Z", self._tz) so my None is getting passed through. Then in DateFormatter, I see: if tz is None: tz = _get_rc_timezone() Which looks like it's getting a timezone from an rc parameter. This strikes me as "not such a good idea". Far too easy to get the timezone wrong -- I'm not sure there should be such a thing as a default time zone. However, the issue at hand is that I want to not show the timezone at all. I would have thought that None would be a good way to spell that, but it's taken already to mean "default". So that means editing/overriding AutoDateFormatter. The way it's written, I pretty much have to re-write the entire thing, which isn't so bad, but it might be nicer if we could make it easier to override just part of it. One idea: Some say that the "right" way to spell "case/switch" in Python is a dict, rather than a collection of if--elifs. So in this case, we could make a dict of format strings, something like below. I've tried this, and I can now easily override the formatting for a particular time range, like so: Formatter = mpl.dates.AutoDateFormatter(locator, tz=None) # edit the format strings to remove the TZ spec # this only works with my custom version of AutoDateLocator Formatter.format_strings[1.0/24.0] = "%H:%M:%S" I do agree with the comments that there are other ways to improve this, but maybe this is a start. -Chris class AutoDateFormatter(ticker.Formatter): """ This class attempts to figure out the best format to use. This is most useful when used with the :class:`AutoDateLocator`. """ # This can be improved by providing some user-level direction on # how to choose the best format (precedence, etc...) # Perhaps a 'struct' that has a field for each time-type where a # zero would indicate "don't show" and a number would indicate # "show" with some sort of priority. Same priorities could mean # show all with the same priority. # Or more simply, perhaps just a format string for each # possibility... def __init__(self, locator, tz=None): self._locator = locator self._formatter = DateFormatter("%b %d %Y %H:%M:%S %Z", tz) self._tz = tz self.format_strings = { 365.0 : "%Y", 30.0 : "%b %Y", 1.0 : "%b %d %Y", 7.0 : "%b %d %Y", 1.0/24.0 : "%H:%M:%S %Z", 1.0/(24*60) : "%H:%M:%S %Z", 1.0/(24*3600) : "%H:%M:%S %Z", } self.fallback_format = "%b %d %Y %H:%M:%S %Z" def __call__(self, x, pos=0): scale = float( self._locator._get_unit() ) f_string = self.format_strings.get(scale, self.fallback_format) self._formatter = DateFormatter(f_string, self._tz) return self._formatter(x, pos) -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception chris.bar...@noaa.gov -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception chris.bar...@noaa.gov ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users