Thanks.  I think that's actually unrelated to your patch -- but is new 
since 0.91.2.  Fixed in SVN r4872.

Thanks for your help,
Mike

Paul Novak wrote:
> The patch for legends works except for LineCollection. For any call to 
> legend(), I get the errors below,
> 
> Paul
> 
> Traceback (most recent call last):
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtk.py", 
> line 331, in expose_event
>     self._render_figure(self._pixmap, w, h)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtkagg.py", 
> line 75, in _render_figure
>     FigureCanvasAgg.draw(self)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_agg.py", 
> line 257, in draw
>     self.figure.draw(self.renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line 
> 698, in draw
>     for a in self.axes: a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1397, 
> in draw
>     a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/legend.py", line 
> 206, in draw
>     h.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 480, 
> in draw
>     lineFunc(renderer, gc, tpath, affine.frozen())
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 740, 
> in _draw_dashed
>     renderer.draw_path(gc, path, trans)
> ValueError: Dash sequence must be an even length sequence; found 1
> Traceback (most recent call last):
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtk.py", 
> line 331, in expose_event
>     self._render_figure(self._pixmap, w, h)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtkagg.py", 
> line 75, in _render_figure
>     FigureCanvasAgg.draw(self)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_agg.py", 
> line 257, in draw
>     self.figure.draw(self.renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line 
> 698, in draw
>     for a in self.axes: a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1397, 
> in draw
>     a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/legend.py", line 
> 206, in draw
>     h.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 480, 
> in draw
>     lineFunc(renderer, gc, tpath, affine.frozen())
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 740, 
> in _draw_dashed
>     renderer.draw_path(gc, path, trans)
> ValueError: Dash sequence must be an even length sequence; found 1
> Traceback (most recent call last):
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtk.py", 
> line 331, in expose_event
>     self._render_figure(self._pixmap, w, h)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_gtkagg.py", 
> line 75, in _render_figure
>     FigureCanvasAgg.draw(self)
>   File 
> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_agg.py", 
> line 257, in draw
>     self.figure.draw(self.renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", line 
> 698, in draw
>     for a in self.axes: a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1397, 
> in draw
>     a.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/legend.py", line 
> 206, in draw
>     h.draw(renderer)
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 480, 
> in draw
>     lineFunc(renderer, gc, tpath, affine.frozen())
>   File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 740, 
> in _draw_dashed
>     renderer.draw_path(gc, path, trans)
> ValueError: Dash sequence must be an even length sequence; found 1
> 
> 
> 
> 
> Michael Droettboom wrote:
>> [I'm bringing this back to the list.  Hope you don't mind.]
>>
>> I've been doing a lot of non-matplotlib work lately and this fell off 
>> my radar.  Thanks for the reminder.
>>
>> The patch looks good to me.  I'm not concerned about doing all this in 
>> _get_handles as opposed to Legend.__init__.  I actually think it's 
>> better in _get_handles because then it's more connected to the 
>> creation of the handles themselves.  (And of course _get_handles is 
>> only ever called from __init__ anyway, so it really is just an 
>> organizational extension of __init__).  I moved all references to 
>> _xdata to _get_handles to be consistent.
>>
>> The one concern I had is that _xdata is being stored as a member 
>> variable, which implicitly assumes that it will be the same for all 
>> handles.  After your patch, it can be different for each handle -- for 
>> instance a line made of markers vs. dashing.  So I've just made it a 
>> local variable to _get_handles and recreate it separately for each 
>> handle.  There's no reason to try to share something so small, and it 
>> just feels safer (fewer potential side effects) that way.
>>
>> I've committed this in r4871.  Please check it out and kick the tires 
>> with all the test cases you came up with along the way and let me know 
>> how it goes.
>>
>> Cheers,
>> Mike
>>
>> Paul Novak wrote:
>>> Mike,
>>>
>>> Thank you for handling the PS backend issues. Below is an email I 
>>> sent earlier about an updated patch for fixing legends with 
>>> numpoints=1; I didn't get any response probably because of my delay 
>>> in responding. If I should restart this thread on the mailing list, I 
>>> can.
>>>
>>> Included below is an updated patch fixing the legend with 
>>> numpoints=1. The patch has been made against SVN and works for 
>>> Line2D, LineCollection, Patch, and RegularPolyCollection. The patch 
>>> could be merged.
>>>
>>> I also think the patch could be improved. Currently, handle._marker 
>>> is examined to determine if the legend should contain lines or 
>>> symbols, but this is done in the _get_handles function. It would be 
>>> better if that could be moved into the Legend class definition, 
>>> however, I do not know how to examine handle._marker in the Legend 
>>> class definition.
>>>
>>> Again, I would appreciate any comments or improvements.
>>>
>>> Thanks,
>>>
>>> Paul
>>>
>>> diff -u a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py
>>> --- a/lib/matplotlib/legend.py    2008-01-09 13:11:00.000000000 -0600
>>> +++ b/lib/matplotlib/legend.py    2008-01-09 13:08:36.000000000 -0600
>>> @@ -175,9 +175,7 @@
>>>          # make a trial box in the middle of the axes.  relocate it
>>>          # based on it's bbox
>>>          left, top = 0.5, 0.5
>>> -        if self.numpoints == 1:
>>> -            self._xdata = npy.array([left + self.handlelen*0.5])
>>> -        else:
>>> +        if self.numpoints > 1:
>>>              self._xdata = npy.linspace(left, left + self.handlelen, 
>>> self.numpoints)
>>>          textleft = left+ self.handlelen+self.handletextsep
>>>          self.texts = self._get_texts(labels, textleft, top)
>>> @@ -236,6 +234,7 @@
>>>
>>>      def _get_handles(self, handles, texts):
>>>          HEIGHT = self._approx_text_height()
>>> +        left = 0.5
>>>
>>>          ret = []   # the returned legend lines
>>>
>>> @@ -243,6 +242,10 @@
>>>              x, y = label.get_position()
>>>              x -= self.handlelen + self.handletextsep
>>>              if isinstance(handle, Line2D):
>>> +                if self.numpoints == 1 and handle._marker == 'None':
>>> +                    self._xdata = npy.linspace(left, left + 
>>> self.handlelen, 2)
>>> +                elif self.numpoints == 1:
>>> +                    self._xdata = npy.array([left + 
>>> self.handlelen*0.5])
>>>                  ydata = (y-HEIGHT/2)*npy.ones(self._xdata.shape, float)
>>>                  legline = Line2D(self._xdata, ydata)
>>>                  legline.update_from(handle)
>>> @@ -253,7 +256,8 @@
>>>
>>>                  ret.append(legline)
>>>              elif isinstance(handle, Patch):
>>> -
>>> +                if self.numpoints == 1:
>>> +                    self._xdata = npy.linspace(left, left + 
>>> self.handlelen, 2)
>>>                  p = Rectangle(xy=(min(self._xdata), y-3/4*HEIGHT),
>>>                                width = self.handlelen, height=HEIGHT/2,
>>>                                )
>>> @@ -263,6 +267,8 @@
>>>                  p.set_clip_path(None)
>>>                  ret.append(p)
>>>              elif isinstance(handle, LineCollection):
>>> +                if self.numpoints == 1:
>>> +                    self._xdata = npy.linspace(left, left + 
>>> self.handlelen, 2)
>>>                  ydata = (y-HEIGHT/2)*npy.ones(self._xdata.shape, float)
>>>                  legline = Line2D(self._xdata, ydata)
>>>                  self._set_artist_props(legline)
>>> @@ -277,6 +283,8 @@
>>>                  ret.append(legline)
>>>
>>>              elif isinstance(handle, RegularPolyCollection):
>>> +                if self.numpoints == 1:
>>> +                    self._xdata = npy.array([left])
>>>                  p = Rectangle(xy=(min(self._xdata), y-3/4*HEIGHT),
>>>                                width = self.handlelen, height=HEIGHT/2,
>>>                                )
>>>
>>>
>>>
>>> Michael Droettboom wrote:
>>>> Thanks for pointing that out -- I didn't even notice.
>>>>
>>>> There was an ordering problem in how colors were being set.  This 
>>>> should be fixed in r4870.
>>>>
>>>> Cheers,
>>>> Mike
>>>>
>>>> Paul Novak wrote:
>>>>> I have another problem after updating to SVN r4869. The ticks take 
>>>>> the color of the plotted line without regard to the default. For 
>>>>> example,
>>>>>
>>>>> matplotlib.rc('xtick', color='black')
>>>>> matplotlib.rc('ytick', color='black')
>>>>> plot(x, y, 'red')
>>>>>
>>>>> will give red ticks.
>>>>>
>>>>> Paul
>>>>>
>>>>> Michael Droettboom wrote:
>>>>>> It's a bug.  It's now possible for rgba colors to make their way 
>>>>>> all the way down to that level, so the code needs to truncate that 
>>>>>> to rgb (Ps can't handle alpha anyway).
>>>>>>
>>>>>> This is committed in SVN r4869.
>>>>>>
>>>>>> Cheers,
>>>>>> Mike
>>>>>>
>>>>>> Paul Novak wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> I am trying to use the PS backend to make some simple line plots, 
>>>>>>> using the following script, but I get the error messages included 
>>>>>>> below when I try to plot with usetex=True. I have also included 
>>>>>>> the output from --verbose=helpful. I am using the current SVN, 
>>>>>>> and I don't recall having this problem when using 0.91.1.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Paul
>>>>>>>
>>>>>>> ---
>>>>>>> #!/usr/bin/env python
>>>>>>>
>>>>>>> import matplotlib
>>>>>>> matplotlib.use('PS')
>>>>>>> matplotlib.rc('text', usetex = 'True')
>>>>>>> from pylab import *
>>>>>>>
>>>>>>> x = arange(0,5)
>>>>>>> y = 2 * x
>>>>>>> figure(1)
>>>>>>> plot(x, y)
>>>>>>> savefig('psfig')
>>>>>>> show()
>>>>>>>
>>>>>>> ---
>>>>>>> $HOME=/home/pnovak
>>>>>>> CONFIGDIR=/home/pnovak/.matplotlib
>>>>>>> matplotlib data path 
>>>>>>> /usr/lib/python2.5/site-packages/matplotlib/mpl-data
>>>>>>> loaded rc file /home/pnovak/.matplotlib/matplotlibrc
>>>>>>> matplotlib version 0.98pre
>>>>>>> verbose.level helpful
>>>>>>> interactive is False
>>>>>>> units is False
>>>>>>> platform is linux2
>>>>>>> numerix numpy 1.0.3.1
>>>>>>> Using fontManager instance from 
>>>>>>> /home/pnovak/.matplotlib/fontManager.cache
>>>>>>> backend PS version Level II
>>>>>>> Found dvipng version 1.5
>>>>>>>
>>>>>>> Traceback (most recent call last):
>>>>>>>    File "junk.py", line 15, in <module>
>>>>>>>      savefig('psfig')
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/pyplot.py", 
>>>>>>> line 271, in savefig
>>>>>>>      return fig.savefig(*args, **kwargs)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", 
>>>>>>> line 854, in savefig
>>>>>>>      self.canvas.print_figure(*args, **kwargs)
>>>>>>>    File 
>>>>>>> "/usr/lib/python2.5/site-packages/matplotlib/backend_bases.py", 
>>>>>>> line 1085, in print_figure
>>>>>>>      **kwargs)
>>>>>>>    File 
>>>>>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_ps.py", 
>>>>>>> line 837, in print_ps
>>>>>>>      return self._print_ps(outfile, 'ps', *args, **kwargs)
>>>>>>>    File 
>>>>>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_ps.py", 
>>>>>>> line 863, in _print_ps
>>>>>>>      orientation, isLandscape, papertype)
>>>>>>>    File 
>>>>>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_ps.py", 
>>>>>>> line 1051, in _print_figure_tex
>>>>>>>      self.figure.draw(renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/figure.py", 
>>>>>>> line 698, in draw
>>>>>>>      for a in self.axes: a.draw(renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", 
>>>>>>> line 1397, in draw
>>>>>>>      a.draw(renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/axis.py", 
>>>>>>> line 680, in draw
>>>>>>>      tick.draw(renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/axis.py", 
>>>>>>> line 179, in draw
>>>>>>>      self.label1.draw(renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/text.py", 
>>>>>>> line 761, in draw
>>>>>>>      Text.draw(self, renderer)
>>>>>>>    File "/usr/lib/python2.5/site-packages/matplotlib/text.py", 
>>>>>>> line 309, in draw
>>>>>>>      self._fontproperties, angle)
>>>>>>>    File 
>>>>>>> "/usr/lib/python2.5/site-packages/matplotlib/backends/backend_ps.py", 
>>>>>>> line 544, in draw_tex
>>>>>>>      color = '%1.3f,%1.3f,%1.3f'% gc.get_rgb()
>>>>>>> TypeError: not all arguments converted during string formatting
>>>>>>>
>>>>>>> -------------------------------------------------------------------------
>>>>>>>  
>>>>>>>
>>>>>>> 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-users mailing list
>>>>>>> Matplotlib-users@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>>>>>
>>>>
>>

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

-------------------------------------------------------------------------
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-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to