That seems like a reasonable fix.  Fixed in SVN r5003.

Cheers,
Mike

Michael Fitzgerald wrote:
> 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
>   


-------------------------------------------------------------------------
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