Quantcast

Calling xlim makes x tick labels format get lost

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Calling xlim makes x tick labels format get lost

Goyo
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Calling xlim makes x tick labels format get lost

Eric Firing
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Calling xlim makes x tick labels format get lost

Goyo
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Calling xlim makes x tick labels format get lost

Eric Firing
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
Loading...