contour legend

Hello everybody!

I’m trying to make a contour plot and add a legend for it. The code is basically

···

from numpy import *

from matplotlib.pyplot import *

put anything into x,y,z arrays

ctr = contour(x,y,z) # plots ok contours of z(x,y)

ctr.collections[0].set_label(‘z’)

legend()

show()


The legend() command produces an error (see below). What’s wrong with this?

Thanks for any help

Jakub

(Python 2.5 + matplotlib 0.98.3 on Win32)


ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: (‘EOF in multi-line statement’, (184, 0))


AttributeError Traceback (most recent call last)

C:\Documents and Settings\jurban<ipython console> in ()

C:\Python25\lib\site-packages\matplotlib\pyplot.pyc in legend(*args, **kwargs)
2388
2389 ret = gca().legend(*args, **kwargs)
-> 2390 draw_if_interactive()
2391 return ret
2392 if Axes.legend.doc is not None:

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in draw_if_i
nteractive()
59 figManager = Gcf.get_active()
60 if figManager is not None:
—> 61 figManager.show()
62
63

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in show(self
)
389 if sys.platform==‘win32’ : self.window.update()
390 else:
–> 391 self.canvas.draw()
392 self._shown = True
393

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in draw(self
)
212
213 def draw(self):
–> 214 FigureCanvasAgg.draw(self)
215 tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
216 self._master.update_idletasks()

C:\Python25\lib\site-packages\matplotlib\backends\backend_agg.pyc in draw(self)
259
260 self.renderer = self.get_renderer()
–> 261 self.figure.draw(self.renderer)
262
263 def get_renderer(self):

C:\Python25\lib\site-packages\matplotlib\figure.pyc in draw(self, renderer)
757
758 # render the axes
–> 759 for a in self.axes: a.draw(renderer)
760
761 # render the figure text

C:\Python25\lib\site-packages\matplotlib\axes.pyc in draw(self, renderer, infram
e)
1521
1522 for zorder, i, a in dsu:
-> 1523 a.draw(renderer)
1524
1525 renderer.close_group(‘axes’)

C:\Python25\lib\site-packages\matplotlib\legend.pyc in draw(self, renderer)
195 if not self.get_visible(): return
196 renderer.open_group(‘legend’)
–> 197 self._update_positions(renderer)
198 if self._drawFrame:
199 if self.shadow:

C:\Python25\lib\site-packages\matplotlib\legend.pyc in _update_positions(self, r
enderer)
521 ydata = ynp.ones(handle.get_xdata().shape, float)
522 handle.set_ydata(ydata+h/2.)
–> 523 handle._legmarker.set_ydata(ydata+h/2.)
524 elif isinstance(handle, Rectangle):
525 handle.set_y(y+1/4
h)

AttributeError: ‘Line2D’ object has no attribute ‘_legmarker’

Hello everybody!

I’m trying to make a contour plot and add a legend for it. The code is basically

···

from numpy import *

from matplotlib.pyplot import *

put anything into x,y,z arrays

ctr = contour(x,y,z) # plots ok contours of z(x,y)

ctr.collections[0].set_label(‘z’)

legend()

show()


The legend() command produces an error (see below). What’s wrong with this?

Thanks for any help

Jakub

(Python 2.5 + matplotlib 0.98.3 on Win32, the same on Fedora 8)


ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: (‘EOF in multi-line statement’, (184, 0))


AttributeError Traceback (most recent call last)

C:\Documents and Settings\jurban<ipython console> in ()

C:\Python25\lib\site-packages\matplotlib\pyplot.pyc in legend(*args, **kwargs)
2388
2389 ret = gca().legend(*args, **kwargs)
-> 2390 draw_if_interactive()
2391 return ret
2392 if Axes.legend.doc is not None:

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in draw_if_i
nteractive()
59 figManager = Gcf.get_active()
60 if figManager is not None:
—> 61 figManager.show()
62
63

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in show(self
)
389 if sys.platform==‘win32’ : self.window.update()
390 else:
–> 391 self.canvas.draw()
392 self._shown = True
393

C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.pyc in draw(self
)
212
213 def draw(self):
–> 214 FigureCanvasAgg.draw(self)
215 tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
216 self._master.update_idletasks()

C:\Python25\lib\site-packages\matplotlib\backends\backend_agg.pyc in draw(self)
259
260 self.renderer = self.get_renderer()
–> 261 self.figure.draw(self.renderer)
262
263 def get_renderer(self):

C:\Python25\lib\site-packages\matplotlib\figure.pyc in draw(self, renderer)
757
758 # render the axes
–> 759 for a in self.axes: a.draw(renderer)
760
761 # render the figure text

C:\Python25\lib\site-packages\matplotlib\axes.pyc in draw(self, renderer, infram
e)
1521
1522 for zorder, i, a in dsu:
-> 1523 a.draw(renderer)
1524
1525 renderer.close_group(‘axes’)

C:\Python25\lib\site-packages\matplotlib\legend.pyc in draw(self, renderer)
195 if not self.get_visible(): return
196 renderer.open_group(‘legend’)
–> 197 self._update_positions(renderer)
198 if self._drawFrame:
199 if self.shadow:

C:\Python25\lib\site-packages\matplotlib\legend.pyc in _update_positions(self, r
enderer)
521 ydata = ynp.ones(handle.get_xdata().shape, float)
522 handle.set_ydata(ydata+h/2.)
–> 523 handle._legmarker.set_ydata(ydata+h/2.)
524 elif isinstance(handle, Rectangle):
525 handle.set_y(y+1/4
h)

AttributeError: ‘Line2D’ object has no attribute ‘_legmarker’

I'm prettu sure this is fixed in svn. If you don't have access to a
svn build, edit

  C:\Python25\lib\site-packages\matplotlib\legend.py

and replace line 523 with

                if hasattr(handle, '_legmarker'):
                    handle._legmarker.set_ydata(ydata+h/2.)

Hope this helps,
JDH

···

On Mon, Oct 20, 2008 at 6:57 AM, Jakub Urban <urban@...2345...> wrote:

C:\Python25\lib\site-packages\matplotlib\legend.pyc in
_update_positions(self, r
enderer)
    521 ydata = y*np.ones(handle.get_xdata().shape, float)
    522 handle.set_ydata(ydata+h/2.)
--> 523 handle._legmarker.set_ydata(ydata+h/2.)
    524 elif isinstance(handle, Rectangle):
    525 handle.set_y(y+1/4*h)

AttributeError: 'Line2D' object has no attribute '_legmarker'