legends

Is there a way for the legend to be outside of the

    > axis? Perhaps rendered separately.

I added Figure.legend and the figlegend to the matlab interface. It
was as easy as I hoped.

In addition to the normal location codes (eg, 'upper center'), I
modified legend so you can specify the location as an x,y tuple in
relative coords. For axes 0,0 is the lower left of the axes and 1,1
is the upper right. Likewise for figure, but the left and top are for
the figure not the axes

There are two important differences from the axes legend:

* you must pass in a list of lines/rectangle, labels and a location
   code. The figure legend doesn't try and guess the appropriate
   legend.

* You can have as many figure legends as you want.

Here is a demo script:

    from matplotlib.matlab import *

    x1 = arange(0.0, 2.0, 0.1)
    x2 = arange(0.0, 2.0, 0.01)

    l1, l2 = plot(x1, sin(2*pi*x1), 'ro', x1, sin(4*pi*x1), 'g>')
    l3, l4 = plot(x2, 0.5*sin(2*pi*x2), '-', x2, 2.0*sin(4*pi*x2), '--')

    figlegend((l1, l2), ('one', 'two'), 'upper center')
    l = figlegend((l3, l4), ('three', 'four'), 'lower left')
    l.get_frame().set_facecolor('y')

    figlegend((l1, l2), ('manual', 'placement'), loc=(0.6, 0.7))

    show()

This function should be added to matlotlib.matlab.py:

def figlegend(handles, labels, loc):
    """
    Place a legend in the figure. Labels are a sequence of
    strings, handles is a sequence of line or patch instances, and
    loc can be a string or an integer specifying the legend
    location

    USAGE:
      legend( (line1, line2, line3),
              ('label1', 'label2', 'label3'),
              'upper right')

    See help(legend) for information about the location codes
    """
    l= gcf().legend(handles, labels, loc)
    draw_if_interactive()
    return l

And the following attached files should be put in their proper places

legend.py (10.2 KB)

figure.py (4.47 KB)