From: John H. <jdh...@ac...> - 2004-02-05 04:34:13
|
>>>>> "matthew" == matthew arnison <ma...@ca...> writes: matthew> I haven't been using the pan and zoom stuff very much, matthew> the issues I described this week are all from initial matthew> plots. If I had been doing more zooming then I would have matthew> noticed your very good point about jumping ticks being matthew> distracting. It's fiddly stuff, but getting it right matthew> helps a lot when interpreting results from plots! OK, I think my approach will be to optimize the number of ticks, tick locations and view limits on the initial plot and then fix num ticks for interactive mode (pan/zoom). Ie, the initial guess should be good, but with interaction, you're on your own. I'll send you some code when I get this figured out. >> Ie, ignore the end point is the default behavior of python. matthew> I guessed as much. But I think in this case the python matthew> behaviour needs to be over-ridden. Python range logic is matthew> generally about integers, arange stretches it, and using matthew> this [) style range for plots over-stretches the matthew> principle beyond usefulness. There are also a couple of matthew> contradictions in matplotlib's behaviour: Yes, but I can defend myself! From the first line of the homepage matplotlib is a pure python 2D plotting library with a Matlab syntax Ie, matplotlib does contain inherent contradictions because it is both matlab-like and python-like. matlab has FORTRAN style indexing (starts with 1) and python has C style indexing (starts with 0). So the first matplotlib figure starts with figure(1). When using the matlab interface matplotlib.matlab, I strive for matlab compatibility. Thus, when you set the axis limits with axis([0, 2, -1, -1]) or set(gca(), 'xlim', [0, 2]) I do it like matlab does, ie, endpoints inclusive. However, I plead innocence in the case of t = arange(0.0, 2.0, 0.1) s = sin(2*pi*t) plot(t, s) If the arrays t and s passed to the plot function do not have the point at t=2.0 defined, "plot" can't guess them. I plot the points you give me. Note that matplotlib *does* provide the matlab function "linspace", which returns an evenly sampled array, endpoints included. So if you want matlab-like behavior you should use matlab-like array functions (linspace) rather Numeric python array functions (arange) to define your arrays. t = linspace(0.0, 2.0, 20) s = sin(2*pi*t) plot(t, s) In a nutshell, with the matlab interface I try to be consistent with matlab, but there are inconsistencies which arise by virtue of the fact that it's natural to use python functions (thank god!, that's why we're all here). I definitely appreciate the criticism, so feel free to keep at it. JDH |