Como alterar o tamanho da legenda com matplotlib.pyplot

324

Pergunta simples aqui: estou tentando obter o tamanho da minha legenda matplotlib.pyplotmenor (ou seja, o texto menor). O código que estou usando é mais ou menos assim:

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)
Mike
fonte

Respostas:

543

Você pode definir um tamanho de fonte individual para a legenda ajustando a proppalavra - chave.

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

Isso leva um dicionário de palavras-chave correspondentes às matplotlib.font_manager.FontPropertiespropriedades. Consulte a documentação da legenda :

Argumentos de palavra-chave:

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.

Também é possível, a partir da versão 1.2.1 , usar a palavra-chave fontsize.

Yann
fonte
1
Você poderia me dizer onde posso encontrar detalhes plot.rcParams.update?
haccks
64

Isso deve fazer

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

Depois faça o enredo depois.

Existem muitos outros rcParams, eles também podem ser definidos no arquivo matplotlibrc.

Também presumivelmente você pode alterá-lo passando uma matplotlib.font_manager.FontPropertiesinstância, mas isso eu não sei como fazer. -> veja a resposta de Yann.

Mauro
fonte
2
Oumatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric
2
que deveria ser em legend.handlelengthvez delegend.linewidth
Emmet B
O membro get_default_size () do FontManager retorna o tamanho padrão. Para mim, são 12
guhur
1
O uso do "PyLab" não é mais incentivado: matplotlib.org/faq/…
Hagbard
51

usando import matplotlib.pyplot as plt

Método 1: especifique o tamanho da fonte ao chamar legenda (repetitiva)

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

Com esse método, você pode definir o tamanho da fonte para cada legenda na criação (permitindo ter várias legendas com diferentes tamanhos de fonte). No entanto, você precisará digitar tudo manualmente sempre que criar uma legenda.

(Nota: @ Mathias711 listou os tamanhos das fontes nomeados disponíveis em sua resposta)

Método 2: especifique o tamanho da fonte em rcParams (conveniente)

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

Com esse método, você define o tamanho da fonte da legenda padrão e todas as legendas o usarão automaticamente, a menos que você especifique o método 1. Isso significa que você pode definir o tamanho da fonte da legenda no início do seu código e não se preocupe em defini-la para cada legenda individual .

Se você usar um tamanho chamado por exemplo 'medium', então o texto da legenda será ampliado com o global font.sizeno rcParams. Para mudar o font.sizeusoplt.rc(font.size='medium')

binnev
fonte
1
Apenas para informar os iniciantes do Python (como eu): o método 1 só funciona após a criação de um gráfico (após uma linha de plot ()) e o método 2 funciona apenas antes de criar um gráfico. Obrigado. Concordo com @ Scott Gigante, esta deve ser a resposta!
Mateus da Silva Teixeira
42

Existem também alguns tamanhos de fonte nomeados , além do tamanho em pontos:

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

Uso:

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

Existem várias configurações para ajustar o tamanho da legenda. Os dois que eu acho mais úteis são:

  • labelspacing: que define o espaçamento entre as entradas de etiqueta em múltiplos do tamanho da fonte. Por exemplo, com uma fonte de 10 pontos, legend(..., labelspacing=0.2)reduzirá o espaçamento entre as entradas para 2 pontos. O padrão na minha instalação é de cerca de 0,5.
  • prop: que permite controle total do tamanho da fonte, etc. Você pode definir uma fonte de 8 pontos usando legend(..., prop={'size':8}). O padrão na minha instalação é de cerca de 14 pontos.

Além disso, os documentação lenda listas de uma série de outros parâmetros de preenchimento e espaçamento, incluindo: borderpad, handlelength, handletextpad, borderaxespad, e columnspacing. Todos eles seguem a mesma forma que espaçamento entre rótulos e área também em múltiplos tamanhos de fonte.

Esses valores também podem ser definidos como padrões para todas as figuras usando o arquivo matplotlibrc .

Bryan P
fonte
5

Na minha instalação, o FontProperties altera apenas o tamanho do texto, mas ainda é muito grande e espaçado. Eu encontrei um parâmetro pyplot.rcParams: legend.labelspacingque eu estou supondo que está definido para uma fração do tamanho da fonte. Eu mudei com

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

Não sei como especificá-lo para a função pyplot.legend - passando

prop={'labelspacing':0.25}

ou

prop={'legend.labelspacing':0.25}

volta com um erro.

swint144
fonte
0

plot.legend (loc = 'inferior direito', decimal_places = 2, fontsize = '11', title = 'Olá', title_fontsize = '20')

Adarsha Neupane
fonte