Thanks.  I have fixed 1), and added a "closed" kwarg to fill() and 
Polygon.__init__() (which defaults to True to mimic behavior of 0.91 and 
earlier).  hist() has been updated to call fill() with closed=False.

Cheers,
Mike

Manuel Metz wrote:
> Michael Droettboom wrote:
>> I've gone ahead and fixed this in the Polygon patch.  As you point 
>> out, if someone wants an open polygon, they can use PathPatch, and 
>> Polygon was never able to do that before anyway.
>>
>> Cheers,
>> Mike
>
> Hi Mike,
>
> 1) I think that there is a bug in the patch: xy is a (N,2) array and I 
> get an error message for the line
>
>    if len(xy) and xy[0] !=xy[-1]:
> ValueError: The truth value of an array with more than one element is 
> ambiguous. Use a.any() or a.all()
>
> so, I think it should really be
>
>    if len(xy) and (xy[0] !=xy[-1]).any():
>
> 2) With this change the output hist doesn't look that good any more, 
> since it relies on the axes fill method. axes fill produced a filled 
> patch where the enclosing line was not closed (i.e. open at bottom of 
> the hist). So you could easily produce a nice unfilled step 
> line-histogram and I intended to make this the default behaviour for 
> hist(histtype='step'). Now the line gets closed which most users - I 
> guess - don't want to.
>
>   So maybe it is needed to have a keyword for the axes fill method to 
> control whether the patch should be closed or not.
>
> Manuel
>
>> Eric Firing wrote:
>>> Michael Droettboom wrote:
>>>> Thanks.  That's a good argument to do the close for fill().  I'll 
>>>> wait a bit to see if others chime in, but at least at that level it 
>>>> seems to be a no-brainer.  Whether we want to do this in the 
>>>> Polygon patch is still an open question, perhaps.
>>> Mike,
>>>
>>> Let's see if anyone says anything either way.  If no one does, then 
>>> I suggest that you should be the one to decide whether it makes 
>>> sense to make the change in patches or in fill.  If the ultimate 
>>> decision is to change patches, then that is simpler, and there is no 
>>> point in making the slightly more complicated changes in axes.  In 
>>> either case, I think the closing should be done only if a test shows 
>>> that the points passed in are not already closed.
>>>
>>> Looking at patches a little more, I think I would be inclined to put 
>>> the change in Polygon, on the grounds that a polygon simply is a 
>>> *closed* path specified by its vertices; there should be no need to 
>>> explicitly close it, although it may be more efficient to do so.  
>>> For the case where someone wants a general path, it looks like you 
>>> have thoughtfully provided the PathPatch object, so we don't really 
>>> lose generality by forcing the Polygon to be closed.
>>>
>>> Eric
>>>
>>>
>>>
>>>> Cheers,
>>>> Mike
>>>>
>>>> Eric Firing wrote:
>>>>> Eric Firing wrote:
>>>>>> Michael Droettboom wrote:
>>>>>>> I'm not entirely certain this is desirable behavior -- what if 
>>>>>>> the user *wants* to draw an open-yet-filled polygon?  How could 
>>>>>>> that be done?  (Admittedly, it couldn't be done before).  It 
>>>>>>> seems more general to require the user to close polygons.
>>>>>> True.  I don't feel strongly about this.  My guess is that at 
>>>>>> least at the level of the Axes.fill method, a user would almost 
>>>>>> never want the open-yet-filled case, but I could be guessing 
>>>>>> wrong, or the "almost" qualifier could be critical.  We could do 
>>>>>> automatic closing only at that level, however.
>>>>>>
>>>>>> Maybe the best alternative is to leave the trunk behavior as it 
>>>>>> is, and make sure the documentation is very explicit about the 
>>>>>> need to supply a closed path.  This change could be added to 
>>>>>> API_CHANGES, as well as to the Axes.fill docstring.
>>>>>>
>>>>>> Does anyone know how Matlab, IDL, etc. handle this?
>>>>> Here is the Matlab help text; matlab does automatically close the 
>>>>> polygons:
>>>>>
>>>>> fill(X,Y,C) creates filled polygons from the data in X and Y with 
>>>>> vertex color specified by C. C is a vector or matrix used as an 
>>>>> index into the colormap. If C is a row vector, length(C) must 
>>>>> equal size(X,2) and size(Y,2); if C is a column vector, length(C) 
>>>>> must equal size(X,1) and size(Y,1). If necessary, fill closes the 
>>>>> polygon by connecting the last vertex to the first.
>>>>>
>>>>> Eric
>>
>
>

-- 
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to