Come regolare la dimensione della casella della legenda di matplotlib

2022-07-29 12:00:10

Ho un grafico il cui angolo superiore sinistro è abbastanza vuoto. Quindi decido di mettere lì la mia scatola della leggenda.

Tuttavia, trovo che gli oggetti nella legenda siano molto piccoli e anche la scatola della legenda sia abbastanza piccola.

Con "piccolo", intendo qualcosa del genere

inserisci la descrizione dell'immagine qui

Come posso ingrandire gli elementi (non i testi!) nella casella della legenda?

Come posso ingrandire la scatola stessa?

- Sibbs Gambling

Source
Risposta


32
  • Per controllare il riempimento all'interno della legenda (ingrandendo effettivamente la casella della legenda) usa il borderpad kwarg.

    Ad esempio, ecco l'impostazione predefinita:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 10, 100)
    
    fig, ax = plt.subplots()
    for i in range(1, 6):
        ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
    ax.legend(loc='upper left')
    plt.show()
    

    inserisci qui la descrizione dell'immagine

    Se cambiamo il riempimento interno con borderpad=2, ingrandiremo la casella della legenda complessiva (le unità sono multipli della dimensione del carattere, simile a }^{):

    em

    inserisci qui la descrizione dell'immagine

    In alternativa, potresti voler cambiare la spaziatura tra gli elementi. Usa import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) fig, ax = plt.subplots() for i in range(1, 6): ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i)) ax.legend(loc='upper left', borderpad=2) plt.show() per controllare questo:

    labelspacing

    inserisci qui la descrizione dell'immagine

    Nella maggior parte dei casi, tuttavia, ha più senso regolare contemporaneamente import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 100) fig, ax = plt.subplots() for i in range(1, 6): ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i)) ax.legend(loc='upper left', labelspacing=2) plt.show() e labelspacing:

    borderpad

    inserisci la descrizione dell'immagine qui

    D'altra parte, se hai marcatori molto grandi, potresti voler aumentare la lunghezza della linea mostrata nella legenda. Ad esempio, l'impostazione predefinita potrebbe essere simile a questa:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 10, 100)
    
    fig, ax = plt.subplots()
    for i in range(1, 6):
        ax.plot(x, i*x + x, label='$y={i}x + {i}$'.format(i=i))
    ax.legend(loc='upper left', borderpad=1.5, labelspacing=1.5)
    plt.show()
    

    inserisci qui la descrizione dell'immagine

    Se cambiamo import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 5) fig, ax = plt.subplots() for i in range(1, 6): ax.plot(x, i*x + x, marker='o', markersize=20, label='$y={i}x + {i}$'.format(i=i)) ax.legend(loc='upper left') plt.show() , otterremo righe più lunghe nella legenda, che sembra un po' più realistica. (Sto anche modificando handlelength e borderpad qui per dare più spazio.)

    labelspacing

    inserisci la descrizione dell'immagine qui

    Dai documenti, ecco alcune delle altre opzioni che potresti voler esplorare:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0, 10, 5)
    
    fig, ax = plt.subplots()
    for i in range(1, 6):
        ax.plot(x, i*x + x, marker='o', markersize=20,
                label='$y={i}x + {i}$'.format(i=i))
    ax.legend(loc='upper left', handlelength=5, borderpad=1.2, labelspacing=1.2)
    plt.show()