>>>>> "Andrew" == Andrew Straw <astraw@...> writes:
Andrew> Sorry to ask for the Nth time, but as essentially all of
Andrew> my plots require at least one log10 axis and as matplotlib
Andrew> looks better and better, I'm wondering about the status of
Andrew> log axes.
No need to apologize, pestering is a good thing since it motivates me
to do the things I already want to do when I know people want them.
Andrew> This has even brought me to the point of delving into the
Andrew> innards of matplotlib just to see how easy (or hard) it
Andrew> would be. So far, it looks possibly like overriding the
Andrew> various Artist.transform_*() methods and some additions to
Andrew> axes.py. Is this the case? Would I be duplicating effort
Andrew> if I jumped in at this point? I can't tell at this point
Andrew> how much work it looks to be -- any estimation?
This is certainly the core change. Other considerations are to get
tick labels to work properly (using exponential or some suitable
notation) and to get the tick locs right (choose them on the decades,
probably using some preset decade choices for the most common use
cases). And the changes need to be consistent with handle graphics,
so that the user can say, for example
set(gca(), 'xscale', 'log') or
set(gca(), 'xscale', 'linear)
and have the desired effect. The latter will happen automagically if
the Axes class defines a set_xscale and set_yscale method expecting
the string arg, which the then forwards the calls to a set_scale
method of the Axes._xaxis or Axes._yaxis instances.
I have been busier than anticipated over the last week so haven't been
able to address this issue as I had hoped, but have been tinkering
with it and thinking about it. If you look at CVS axes class, you'll
see the results of my tickering in the _scale, _scalemap, _scalefunc
attributes of the Axis class. I'm not at all convinced this is the
right design, though. One thing to consider is to factor the tick
loc-ing and labeling into a separate class to clean up the Axis
As far as your helping, that would be great. As far as how much time
it would take, I think it would take me anywhere from half a day to
two days to get it just right, but I'm inclined to the lower
estimates. Let me know how you want to proceed: I can envision
anything from you making the required changes and checking them into
CVS, to us collaborating on the design and implementation, to me just
getting off my ass and doing it. I would certainly welcome some input
from you, and know from the quality of your work on vision egg that it
would improve matplotlib. Which given your impending move to the
Dickinson lab, might be a good thing for you too :-)
Andrew> However, I think "ticks = asarray(ticks)" would be
Andrew> cleaner, and probably little faster, too.
Right, I wrote some of the code a long time ago and would do this
differently now. My original thought was that in many of the use
cases the sequences would already be arrays and the try/except thing
would avoid a performance hit of creating a new array, but have since
learned that this is the purpose of asarray. If you decide to do the
log scaling thing, feel free to make these kinds of changes as you
go. The examples dir currently serves as my poor-man's unit testing
framework so you can validate your changes against them.
Note that I made several minor changes to the code last night so be
sure to grab the latest CVS if you want to do any development.