Goyo wrote: > El dom, 12-10-2008 a las 13:22 -1000, Eric Firing escribió: >> Goyo wrote: >>> Hi all, >>> >>> I'm plotting time series and using a custom format for x tick labels >>> because I want to see both date and time. But calling xlim makes the >>> default format return -- only dates or only times, it depends on the >>> displayed interval. >>> >>> I can get my preferred format back by calling set_major_formatter again, >>> but this is inconvenient for interactive use. >>> >>> I wonder if there is a better way for changing x limits while keeping >>> tick labels format unchanged. >>> >>> I'm using matplotlib 0.98.3 >>> >>> Thanks >>> >>> Goyo >>> >>> >>> Sample code -- you need a combination of python shell and matplotlib GUI >>> which allows for interactive use in order to get this working as >>> expected: >>> >>> ---------------------------------------- >>> >>> from matplotlib import pyplot >>> from matplotlib import dates >>> from datetime import datetime, timedelta >>> from numpy import random >>> >>> pyplot.ion() >>> >>> # create data >>> dstart = datetime(2008, 1, 1, 0, 0) >>> dend = datetime(2008, 1, 5, 23, 50) >>> delta = timedelta(minutes=10) >>> x = dates.drange(dstart, dend, delta) >>> y = random.random_sample(len(x)) >>> >>> # plot data >>> pyplot.plot(x, y) >>> >>> # format x tick labels >>> axis = pyplot.gca() >>> fig = pyplot.gcf() >>> axis.xaxis.set_major_formatter(dates.DateFormatter('%Y-%b-%d %H:%M')) >>> fig.autofmt_xdate() >>> >>> # draw the figure >>> pyplot.draw() >>> >>> -------------------------------------- >>> >>> Look at the tick labels, they show both date and time even if you zoom >>> and pan using the GUI. >>> >>> Now if I want to look at the second day: >>> >>> dstart = datetime(2008, 1, 1, 0, 0) >>> dend = datetime(2008, 1, 1, 23, 50) >>> pyplot.xlim(dstart, dend) >>> >>> And the format has changed. >> I don't see this problem using ipython -pylab with mpl from svn on >> linux, gtkagg backend. What version, backend, and platform are you using? > > matplotlib 0.98.3-3ubuntu1~ppa1 from Benjamin Drung's ppa > (<http://ppa.launchpad.net/bdrung/ubuntu>) on Ubuntu Hardy. > > It was the standard python shell and TKAgg, but I get the same result > with ipython -pylab and GTKAgg. Indeed the format change can be > "documented": > > print axis.xaxis.get_major_formatter() > pyplot.xlim(dstart, dend) > print axis.xaxis.get_major_formatter() > > The first print: > <matplotlib.dates.DateFormatter instance at 0xb6e2462c> > and the second: > <matplotlib.dates.AutoDateFormatter instance at 0x884dc4c> > > I did some debugging and realized that xaxis.units is None after > plotting, so xlim triggers a call to xaxis.set_units which sets the > default formatter (and units, whatever it means). > > If I set my formatter again, xaxis.units is not None anymore but still > xaxis._update_axisinfo sets the default formatter. > > Anyway I worked around this by writing my own version of xlim which > first saves the formatter, then sets xlim and sets the saved formatter > again. > > Goyo >
I know some work was done on units support since 0.98.3; given that I am not seeing the problem when I try your original example with svn mpl, I hope and suspect that this problem has in fact already been solved. Eric ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users