I've recently been working with Karl-Dieter on shifting our axes and gridline functionality over to the corresponding matplotlib functions, and exposing the matplotlib object a bit better. I think we are to the point where we can use comments and a vote on a new strategy for placing axes. Since this affects some core functionality that is used by lots of people (especially by lots of non-developers), testing and feedback is crucial.
You can try this patch out by applying the second patch at #5448: http://trac.sagemath.org/sage_trac/raw-attachment/ticket/5448/trac-5448-matplotlib-axes-gridlines.patch You will also need to install two new spkgs: http://sage.math.washington.edu/home/jason/matplotlib-0.99.0.spkg http://sage.math.washington.edu/home/jason/networkx-0.99.p1-fake_really-0.36.p1.spkg (this is to take care of some deprecations introduced by the new matplotlib spkg) I've posted up a bunch of examples from the doctests at http://sage.math.washington.edu/home/jason/newgraphics.pdf, so you can see what we are talking about even without installing anything. If you want a couple of reasons why we should delete our axes and gridlines code and instead shift that functionality to matplotlib, read the next section. If you just want to see and vote on the proposal for axes placement, skip down to the bottom of this message. Moving things to matplotlib ================================ A common complaint is that our axes cross at nonstandard points, seemingly at random. This is compounded by the ticks not always being labeled on the axes. Even though people have been complaining about this for years, no one (or at least, *very* few people) have touched the axes code. It seems pretty unmaintained at this point---I know I'm afraid to touch it and I think I'm as comfortable as almost anyone with most of the 2d graphics code. Contrast this to matplotlib, the project upon which our 2d graphics are based, and which is the gold standard for python graphics. This project is very actively maintained and used by lots and lots of people in the scientific python community. In the most recent release of matplotlib, capability was added to draw axes in the middle of the picture. One of the goals of the patch above is to shift as much of our functionality as possible over to matplotlib so we don't have to maintain the code. Another *huge* benefit we get from this is that we can do much more advanced things with graphics. On occasion, people have asked if they could do more advanced things with Sage graphics, and because we do so much on our own, they have to basically drop Sage and work directly with matplotlib. With this patch, they will be able to construct a graphic in Sage, then ask for that graphic as a matplotlib figure, and then be able to use the many tools of matplotlib to extensively tweak their graphic. Because we would be using standard matplotlib tools for axes and gridlines, there is no loss moving to matplotlib from Sage to finish tweaking a graph. I think gridlines is another area that is wonderful to have, but we're increasing the amount of code that we need to maintain, while similar functionality is offered from matplotlib. Furthermore, there are some people doing active development in curvilinear coordinates and grids in matplotlib, which we can take advantage of if we move our gridlines to use matplotlib gridlines. Proposal for axes placement =========================== Here is a consistent strategy for drawing axes on a graphic. This comes out of discussions with Mike Hansen and maybe some others at the Sage Days in January. x-axis ------ * If the line y=0 is in the picture, draw the x-axis there. * If the picture is entirely in the upper half-plane, draw the x-axis on the bottom of the picture, offset below the picture just a bit to indicate that it is not the line y=0. * If the picture is entirely in the lower half-plane, draw the x-axis on the top of the picture, offset above the picture just a bit to indicate that it is not the line y=0. y-axis ------ * If the line x=0 is in the picture, draw the y-axis there. * If the picture is entirely in the right half-plane, draw the y-axis on the left of the picture, offset to the left of the picture just a bit to indicate that it is not the line x=0. * If the picture is entirely in the left half-plane, draw the y-axis on the right of the picture, offset to the right of the picture just a bit to indicate that it is not the line x=0. frames and axes --------------- * If both frames and axes are wanted, then draw the frame and the lines y=0 and x=0 (if they are visible) You can see pictures of these in the first few pages of http://sage.math.washington.edu/home/jason/newgraphics.pdf There are several nice things about this: 1. The axes only ever cross at the origin, so there is no confusion 2. You can instantly tell what quadrant(s) the picture is in, based on where the axes are around the picture. The more I have played with this, the more I really, really like it. So, what do you think? Yes or no? Thanks, Jason -- Jason Grout --~--~---------~--~----~------------~-------~--~----~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---