[Python] Moving matplotlib legend outside of the axis makes it cutoff by the figure box

Discussão em 'Python' iniciado por Stack, Fevereiro 25, 2025.

  1. Stack

    Stack Membro Participativo

    I'm familiar with the following questions:

    Matplotlib savefig with a legend outside the plot

    How to put the legend out of the plot

    It seems that the answers in these questions have the luxury of being able to fiddle with the exact shrinking of the axis so that the legend fits.

    Shrinking the axes, however, is not an ideal solution because it makes the data smaller making it actually more difficult to interpret; particularly when its complex and there are lots of things going on ... hence needing a large legend

    The example of a complex legend in the documentation demonstrates the need for this because the legend in their plot actually completely obscures multiple data points.

    http://matplotlib.sourceforge.net/users/legend_guide.html#legend-of-complex-plots

    What I would like to be able to do is dynamically expand the size of the figure box to accommodate the expanding figure legend.

    import matplotlib.pyplot as plt
    import numpy as np

    x = np.arange(-2*np.pi, 2*np.pi, 0.1)
    fig = plt.figure(1)
    ax = fig.add_subplot(111)
    ax.plot(x, np.sin(x), label='Sine')
    ax.plot(x, np.cos(x), label='Cosine')
    ax.plot(x, np.arctan(x), label='Inverse tan')
    lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,0))
    ax.grid('on')


    Notice how the final label 'Inverse tan' is actually outside the figure box (and looks badly cutoff - not publication quality!) [​IMG]

    Finally, I've been told that this is normal behaviour in R and LaTeX, so I'm a little confused why this is so difficult in python... Is there a historical reason? Is Matlab equally poor on this matter?

    I have the (only slightly) longer version of this code on pastebin http://pastebin.com/grVjc007

    Continue reading...

Compartilhe esta Página