From: Darren Dale <dd55@co...>  20060713 02:01:34

On Wednesday 12 July 2006 7:19 pm, you wrote: > Darren Dale wrote: > > On Wednesday 12 July 2006 16:16, Mark Bakker wrote: > >>I am following up on the discussion of passing a single 2D array to plo= t. > >>Wouldn't it make more sense that, in Python array style, > >>if you give it a single N x K argument you plot rows against the first > >> row? > > > > That's not the behavior I would have expected. I would have expected ea= ch > > row to be plotted as a funtion of the column index, just like > > plot([1,2,3,4]) is done now, but with each row in a different color. I > > would like > > plot([1,2,3,4], array([[1,2,3,4],[2,3,4,5]])) to plot two lines as a > > function of the single xlist, and I would like=20 > > plot(array([[1,2,3,4],[2,3,4,5]]), array([[1,2,3,4],[2,3,4,5]])) to take > > the next obvious step. I *think* matlab does this, but its been so long > > since I used it... > > I was afraid someone would bring up these possibilities... Let me temper what I said. *If* a change was considered, what I described=20 seems to be the most intuitive behavior. > We are going to have some tradeoffs among matlab compatibility, internal > consistency, and adherence to the underlying data storage model. agreed > Here is what Matlab does (and in one respect it is not what I thought I > remembered): > > 1) Given a single NxK matrix, it plots each column against the row index. > > 2) Given a vector and an NxK, it plots each column against the vector. > > 3) Given an NxK and a vector, it plots the vector against each column. > > 4) Given an NxK and an NxK it plots each column from the second against > the corresponding column of the first. > > I think this is a good model: fairly simple, consistent, intuitive, and > covers a good range of reallife situations. =A0It differs from what I > thought I remembered, and from what I think Stefan requested, in that, > given an Nx2, it does not plot the second column against the first. > That behavior, however, does not generalize nicely to NxK for any K!=3D2, > so I now think we should choose either one or the other. =A0 A virtue of > Stefan's Nx2 proposal is that it is consistent with the changes I made > to elsewhere so that paths can be specified as Nx2 arrays; this, in > turn, was consistent with the original specification as sequences of > (x,y) tuples. =A0But plot has never used sequences of (x,y) tuples, so the > argument for the Nx2 form is weaker here. > > I don't know whether the reason Matlab chooses the columns as the data > vectors is because of the Fortran storage order Matlab uses, or whether > there is some other reason.=20 I believe this is the reason. > Personally I am very comfortable with it,=20 > perhaps simply because of my Matlab experience. =A0I think part of it is > that columns in a table seem more natural as data vectors than rows, > however; tables are usually oriented so that columns (fields) are > different variables, and the row index is the sample number, or time, or > a spatial coordinate. > > To summarize, the options seem to be: > > 1) Leave plot argument parsing alone. > 2) Accept an Nx2 array in place of a pair of arguments containing x and y. > > 3) Implement the Matlab model. > 4) Implement the Matlab model, but taking rows instead of columns in an > X or Y array that is 2D. > > I am open to arguments, but my preference is the Matlab model. =A0I don't > think that the difference in native array storage order matters much. > It is more important to have the API at the plot method and function > level match the way people think. I would probably use 4, but not 3. I don't like the sound of 2. But that's= =20 just my opinion.=20 Darren 