Bug in errorbar/docstring?

Hi,

I think there's a bug in errorbar in trying to use asymmetric
y-errorbars. According to the docstring:

    xerr and yerr may be any of:

        a rank-0, Nx1 Numpy array - symmetric errorbars +/- value

        an N-element list or tuple - symmetric errorbars +/- value

        a rank-1, Nx2 Numpy array - asymmetric errorbars -column1/+column2

However, code below that tries to use the last of these options fails,
as shown in the example below.

from matplotlib import pyplot as P
import numpy as N
x = N.linspace(-3, 3, 100)
y = x**2
P.errorbar(x, y, yerr=N.c_[0.1*y, 0.2*y])
P.show()

This fails with:

Traceback (most recent call last):
  File "errorbar_test.py", line 7, in <module>
    P.errorbar(x, y, yerr=N.c_[0.1*y, 0.2*y])
  File "/usr/lib64/python2.5/site-packages/matplotlib/pyplot.py", line
1591, in errorbar
    ret = gca().errorbar(*args, **kwargs)
  File "/usr/lib64/python2.5/site-packages/matplotlib/axes.py", line
3766, in errorbar
    barcols.append( self.vlines(x, lower, upper, **lines_kw) )
  File "/usr/lib64/python2.5/site-packages/matplotlib/axes.py", line
2528, in vlines
    for thisx, (thisymin, thisymax) in zip(x,Y)]
ValueError: too many values to unpack

If I change yerr instead to (0.1*y, 0.2*y), which isn't listed as an
option, I get my desired behavior. Looking at the code, it seems to
come down to lines 3757-3764 in axes.py:

       if iterable(yerr) and len(yerr)==2 and iterable(yerr[0]) and
iterable(yerr[1]):
            # using list comps rather than arrays to preserve units
            lower = [thisy-thiserr for (thisy, thiserr) in
cbook.safezip(y,yerr[0])]
            upper = [thisy+thiserr for (thisy, thiserr) in
cbook.safezip(y,yerr[1])]
        else:
            # using list comps rather than arrays to preserve units
            lower = [thisy-thiserr for (thisy, thiserr) in
cbook.safezip(y,yerr)]
            upper = [thisy+thiserr for (thisy, thiserr) in
cbook.safezip(y,yerr)]

This code would actually seem to preclude the use of an Nx2 array, so
something probably needs to be changed to bring the docstring and the
code into agreement.

Thanks,

Ryan

···

--
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma