From: Michael F. <ast...@gm...> - 2008-03-12 22:01:19
|
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 |