2011-08-19 7 views
190

Domanda semplice: sto cercando di ridurre la dimensione della mia legenda utilizzando matplotlib.pyplot (ad esempio, il testo deve essere più piccolo). Il codice che sto utilizzando più o meno così:Come modificare la dimensione della legenda con matplotlib.pyplot

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) 

risposta

338

È possibile impostare una dimensione di carattere individuale per la legenda regolando la parola chiave prop.

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

questo richiede un dizionario di parole chiave corrispondenti a matplotlib.font_manager.FontProperties proprietà. Vedi le documentation for legend:

argomenti 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. 

E 'anche possibile, a partire dalla versione 1.2.1, per usare la parola chiave fontsize.

+1

Potresti dirmi dove posso trovare i dettagli su 'plot.rcParams.update'? – haccks

39

Questo dovrebbe fare

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

Poi fare la trama in seguito.

Ci sono un sacco di altri rcParam, possono anche essere impostati nel file matplotlibrc.

Anche presumibilmente è possibile cambiarlo passando un'istanza matplotlib.font_manager.FontProperties ma questo non so come fare. -> vedi la risposta di Yann.

+1

O 'matplotlib.rc ('leggenda', fontsize = 0,5, linewidth = 2)' – Eric

+1

che dovrebbe essere 'legend.handlelength' invece di' legend.linewidth' –

+0

Il get_default_size membro() su FontManager restituisce la dimensione predefinita. Per me è il 12 –

4

Nella mia installazione, FontProperties modifica solo la dimensione del testo, ma è ancora troppo grande e distanziata. Ho trovato un parametro in pyplot.rcParams: legend.labelspacing, che suppongo sia impostato su una frazione della dimensione del carattere. Ho cambiato con

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

Non sono sicuro di come specificare alla funzione pyplot.legend - passando

prop={'labelspacing':0.25} 

o

prop={'legend.labelspacing':0.25} 

ritorna con un errore .

+6

Il solo dare 'legend (labelspacing = 0.25)' ha funzionato per me. – Adobe

12

Ci sono più impostazioni per la regolazione della dimensione della legenda. I due che ritengo più utili sono:

  • labelpacing: che imposta la spaziatura tra le voci dell'etichetta in multipli della dimensione del carattere. Ad esempio con un font a 10 punti, legend(..., labelspacing=0.2) ridurrà la spaziatura tra le voci in 2 punti. Il valore predefinito sulla mia installazione è circa 0,5.
  • prop: che consente il controllo completo delle dimensioni del carattere, ecc. È possibile impostare un font a 8 punti utilizzando legend(..., prop={'size':8}). Il valore predefinito sulla mia installazione è di circa 14 punti.

Inoltre, le legend documentation elenchi un numero di altri parametri imbottitura e spaziatura tra cui: borderpad, handlelength, handletextpad, borderaxespad e columnspacing. Tutti seguono la stessa forma di labelpacing e area anche in multipli di fontsize.

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

26

Ci sono anche un paio di nome fontsizes, a parte le dimensioni in punti:

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

Usage:

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

utilizzando import matplotlib.pyplot as plt

Metodo 1: specificare il fontsize 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 il tipo di carattere per ogni legenda durante la creazione (consentendo di avere più legende con caratteri diversi). Tuttavia, dovrai digitare tutto manualmente ogni volta che crei una legenda.

(Nota: @ Mathias711 elencato le fontsizes disponibili denominate in sua risposta)

Metodo 2: specificare il fontsize in rcParams (comoda)

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

Con questo metodo si imposta la leggenda di default fontsize, e tutte le legende la useranno automaticamente a meno che non specifichi diversamente usando il metodo 1. Ciò significa che puoi impostare la tua leggenda fontsize all'inizio del tuo codice e non preoccuparti di impostarla per ogni singola legenda.

Se si utilizza una dimensione denominata, ad es. 'medium', quindi il testo della legenda verrà ridimensionato con lo font.size globale in rcParams. Per cambiare font.size uso plt.rc(font.size='medium')