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