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 plot.
>>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 each 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 x-list, and I would like  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...

One of the problems with fancy argument handling is that there are many 
ways it can be done, so we have to decide on the behavior we want; and 
inevitably this will surprise (and probably irritate) some people just 
as it pleases others.  (Other problems include complex code, complex 
documentation, and runtime overhead.  For interactive use, however, 
fancy argument handling may be worth the trouble.)

We are going to have some tradeoffs among matlab compatibility, internal 
consistency, and adherence to the underlying data storage model.

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 real-life situations.  It 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!=2, 
so I now think we should choose either one or the other.   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.  But 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.  Personally I am very comfortable with it, 
perhaps simply because of my Matlab experience.  I 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 2-D.

I am open to arguments, but my preference is the Matlab model.  I 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.

Eric


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to