Come modificare le dimensioni della legenda con matplotlib.pyplot


324

Domanda semplice qui: sto cercando di ridurre le dimensioni della mia legenda usando matplotlib.pyplot(per esempio, il testo per essere più piccolo). Il codice che sto usando va in questo modo:

plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0],  color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1],  color='r',  label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2],  color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)

Risposte:


543

È possibile impostare una dimensione del carattere individuale per la legenda modificando la propparola chiave.

plot.legend(loc=2, prop={'size': 6})

Questo richiede un dizionario di parole chiave corrispondenti alle matplotlib.font_manager.FontPropertiesproprietà. Vedi la documentazione per la legenda :

Argomenti delle parole chiave:

prop: [ None | FontProperties | dict ]
    A matplotlib.font_manager.FontProperties instance. If prop is a 
    dictionary, a new instance will be created with prop. If None, use
    rc settings.

È anche possibile, a partire dalla versione 1.2.1 , utilizzare la parola chiave fontsize.


1
Potresti dirmi dove posso trovare dettagli su plot.rcParams.update?
Hawcks

64

Questo dovrebbe fare

import pylab as plot
params = {'legend.fontsize': 20,
          'legend.handlelength': 2}
plot.rcParams.update(params)

Quindi fare la trama in seguito.

Ci sono molti altri rcParams, che possono anche essere impostati nel file matplotlibrc.

Presumibilmente puoi anche cambiarlo passando matplotlib.font_manager.FontPropertiesun'istanza ma questo non so come fare. -> vedi la risposta di Yann.


2
Oppurematplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric,

2
quello dovrebbe essere legend.handlelengthinvece dilegend.linewidth
Emmet B

Il membro get_default_size () di FontManager restituisce la dimensione predefinita. Per me sono le 12
guhur,

1
L'uso di "PyLab" non è più incoraggiato: matplotlib.org/faq/…
Hagbard

51

utilizzando import matplotlib.pyplot as plt

Metodo 1: specificare la dimensione del carattere quando si chiama legenda (ripetitiva)

plt.legend(fontsize=20) # using a size in points
plt.legend(fontsize="x-large") # using a named size

Con questo metodo è possibile impostare la dimensione del carattere per ogni legenda al momento della creazione (consentendo di avere più legende con diverse dimensioni del carattere). Tuttavia, dovrai digitare tutto manualmente ogni volta che crei una legenda.

(Nota: @ Mathias711 ha elencato le dimensioni dei caratteri disponibili nella sua risposta)

Metodo 2: specifica la dimensione del carattere in rcParams (conveniente)

plt.rc('legend',fontsize=20) # using a size in points
plt.rc('legend',fontsize='medium') # using a named size

Con questo metodo imposti la dimensione del carattere della legenda predefinita e tutte le legende lo utilizzeranno automaticamente a meno che non specifichi diversamente utilizzando il metodo 1. Ciò significa che puoi impostare la dimensione del carattere della legenda all'inizio del codice e non preoccuparti di impostarla per ogni singola legenda .

Se si utilizza una dimensione denominata 'medium', ad esempio , il testo della legenda verrà ridimensionato con il globale font.sizein rcParams. Per cambiare font.sizeusoplt.rc(font.size='medium')


1
Solo per informare i principianti di Python (come me): il Metodo 1 funziona solo dopo aver creato una trama (dopo una trama ()) e il Metodo 2 funziona solo prima di creare una trama. Grazie. Sono d'accordo con @Scott Gigante, questa dovrebbe essere la risposta!
Mateus da Silva Teixeira,

42

Ci sono anche alcuni tipi di carattere nominati , oltre alle dimensioni in punti:

xx-small
x-small
small
medium
large
x-large
xx-large

Uso:

pyplot.legend(loc=2, fontsize = 'x-small')

19

Esistono più impostazioni per regolare la dimensione della legenda. I due che trovo più utili sono:

  • spaziatura etichette: che imposta la spaziatura tra le voci dell'etichetta in multipli della dimensione del carattere. Ad esempio con un carattere a 10 punti, legend(..., labelspacing=0.2)ridurrà la spaziatura tra le voci a 2 punti. L'impostazione predefinita sulla mia installazione è circa 0,5.
  • prop: che consente il pieno controllo della dimensione del carattere, ecc. È possibile impostare un carattere a 8 punti usando legend(..., prop={'size':8}). L'impostazione predefinita sulla mia installazione è di circa 14 punti.

Inoltre, le documentazione leggenda elenca una serie di altri parametri imbottitura e spaziatura tra cui: borderpad, handlelength, handletextpad, borderaxespad, e columnspacing. Questi hanno tutti la stessa forma di spazio e etichette anche in multipli di dimensione carattere.

Questi valori possono anche essere impostati come valori predefiniti per tutte le figure utilizzando il file matplotlibrc .


5

Nella mia installazione, FontProperties modifica solo le dimensioni del testo, ma è ancora troppo grande e distanziato. Ho trovato un parametro in pyplot.rcParams: legend.labelspacing, che sto cercando di indovinare è impostato su una frazione della dimensione del carattere. L'ho cambiato con

pyplot.rcParams.update({'legend.labelspacing':0.25})

Non sono sicuro di come specificarlo per la funzione pyplot.legend - passando

prop={'labelspacing':0.25}

o

prop={'legend.labelspacing':0.25}

ritorna con un errore.


0

plot.legend (loc = 'in basso a destra', decimal_places = 2, fontsize = '11', title = 'Hey there', title_fontsize = '20')

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.