|
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. ------------------------------------------------------------------------- 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 [hidden email] https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
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? 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 [hidden email] https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
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 ------------------------------------------------------------------------- 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 [hidden email] https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
|
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 [hidden email] https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
| Powered by Nabble | Edit this page |
