Hi all,
I found a small bug in LineCollection, which gives an exception when setting
alpha.  This is manifested in e.g. hlines and vlines:

In [1]: hlines((0,),(-1,),(1,),color='b',alpha=0.1)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

XXX/<ipython console> in <module>()

XXX/lib/python/matplotlib/pyplot.py in hlines(*args, **kwargs)
   1700         hold(h)
   1701     try:
-> 1702         ret =  gca().hlines(*args, **kwargs)
   1703         draw_if_interactive()
   1704     except:

XXX/lib/python/matplotlib/axes.py in hlines(self, y, xmin, xmax, colors,
linestyles, label, **kwargs)
   2609                                     linestyles=linestyles,
label=label)
   2610         self.add_collection(coll)
-> 2611         coll.update(kwargs)
   2612
   2613         minx = min(xmin.min(), xmax.min())

XXX/lib/python/matplotlib/artist.py in update(self, props)
    438             if func is None or not callable(func):
    439                 raise AttributeError('Unknown property %s'%k)
--> 440             func(v)
    441             changed = True
    442         self.eventson = store

XXX/lib/python/matplotlib/collections.py in set_alpha(self, alpha)
    306         else:
    307             artist.Artist.set_alpha(self, alpha)
--> 308             self._facecolors[:, 3] = alpha
    309             self._edgecolors[:, 3] = alpha
    310

IndexError: invalid index



This appears to be because LineCollection.__init__() only uses
Collection._edgecolors, and sets _facecolors to an empty array.  I don't
know if it's the proper solution, but I did this to get it to work:

Index: lib/matplotlib/collections.py
===================================================================
--- lib/matplotlib/collections.py       (revision 5000)
+++ lib/matplotlib/collections.py       (working copy)
@@ -305,7 +305,8 @@
         except TypeError: raise TypeError('alpha must be a float')
         else:
             artist.Artist.set_alpha(self, alpha)
-            self._facecolors[:, 3] = alpha
+            if len(self._facecolors):
+                self._facecolors[:, 3] = alpha
             self._edgecolors[:, 3] = alpha

     def get_linewidths(self):


Best,
Mike
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to