John Hunter wrote:
>>>>>> "David" == David Goldsmith <David.L.Goldsmith@...> writes:
> David> OK, I was afraid of that; in that case, is there some way
> David> to get the height and width of the legend (so I can do what
> David> I want programatically)? Thanks again,
> Again, afraid not. At least nothing obvious. The legend placement is
> done dynamically at draw time, and so it will be difficult to get this
> information ahead of time.
Actually, I don't care (tremendously) if I have to wait 'til after it's
drawn to get the info (I've already found other instances where, to do
what I've wanted, I've had to draw, then get/modify/set then redraw - as
you say, inelegant, but serviceable; it's not like the old days where
re-drawing meant waiting half a minute) so if that info is available
after the figure's been drawn, that's good enough for me (as long as
it's possible to set it as well as get it) for now. Is that what
legendPatch.get_window_extent().get_bounds() does? (I'll probably find
out using dir before you reply, but a reply would be appreciated anyway,
so the info will be in the archive).
> There might be some cleverness that can be
> applied, but nothing easy.
> One option would be connect to the draw event, and then inspect the
> legend properties, and then place it where you want knowing the width
> and the height. Not too elegant, but serviceable. Here is an
> untested sketch
> def ondraw(event):
> if ondraw.done: return
> # in pixels
> left,bottom,width,height = leg.legendPatch.get_window_extent().get_bounds()
> # move your legend....
> ondraw.done = True
> ondraw.done = False
> fig = figure()
> ax = fig.add_subplot(111)
> leg = ax.legend(blah)
> fig.canvas.mpl_connect('draw_event', ondraw)
> It might be better to patch legend directly to do what you want and
> send the patch our way.
I'm getting closer to the point where I feel like I might be capable of
doing this, but I'm not quite there yet. :-)
> Or subclass it.
This is closer to my confidence level.