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
>>>>>>> [email protected]
>>>>>>> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users