Jak zmienić rozmiar legendy za pomocą matplotlib.pyplot

324

Proste pytanie tutaj: staram się, aby rozmiar mojej legendy matplotlib.pyplotbył mniejszy (tzn. Mniejszy tekst). Kod, którego używam, wygląda mniej więcej tak:

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)
mikrofon
źródło

Odpowiedzi:

543

Możesz ustawić indywidualny rozmiar czcionki dla legendy, dostosowując propsłowo kluczowe.

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

Pobiera to słownik słów kluczowych odpowiadających matplotlib.font_manager.FontPropertieswłaściwościom. Zobacz dokumentację dla legendy :

Argumenty słów kluczowych:

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.

Od wersji 1.2.1 można również używać słowa kluczowego fontsize.

Yann
źródło
1
Czy możesz mi powiedzieć, gdzie mogę znaleźć szczegóły plot.rcParams.update?
haccks,
64

To powinno wystarczyć

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

Następnie wykonaj fabułę później.

Istnieje wiele innych rcParams, można je również ustawić w pliku matplotlibrc.

Prawdopodobnie możesz to zmienić, przekazując matplotlib.font_manager.FontPropertiesinstancję, ale nie wiem, jak to zrobić. -> zobacz odpowiedź Yanna.

Mauro
źródło
2
Lubmatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric
2
tak powinno być legend.handlelengthzamiastlegend.linewidth
Emmet B
Element get_default_size () FontManager zwraca domyślny rozmiar. Dla mnie jest to 12
guhur
1
Wykorzystanie „PyLab” nie zachęca żadnej więcej: matplotlib.org/faq/...
Hagbard
51

za pomocą import matplotlib.pyplot as plt

Metoda 1: Określ rozmiar czcionki podczas wywoływania legendy (powtarzalne)

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

Za pomocą tej metody można ustawić rozmiar czcionki dla każdej legendy podczas tworzenia (co pozwala na posiadanie wielu legend o różnych rozmiarach czcionek). Musisz jednak wpisać wszystko ręcznie za każdym razem, gdy tworzysz legendę.

(Uwaga: @ Mathias711 wymienił dostępne nazwane rozmiary czcionek w swojej odpowiedzi)

Metoda 2: Określ rozmiar czcionki w rcParams (wygodne)

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

Za pomocą tej metody ustawiasz domyślny rozmiar czcionki legendy, a wszystkie legendy będą go automatycznie używać, chyba że określisz inaczej za pomocą metody 1. Oznacza to, że możesz ustawić swój rozmiar czcionki legendy na początku kodu i nie martwić się o ustawienie go dla poszczególnych legend .

Jeśli użyjesz nazwanego rozmiaru, np. 'medium'Tekst legendy będzie skalowany wraz z globalnym font.sizew rcParams. Aby zmienić font.sizeużycieplt.rc(font.size='medium')

binnev
źródło
1
Żeby poinformować początkujących Pythona (jak ja): Metoda 1 działa tylko po utworzeniu wykresu (po linii plot ()), a Metoda 2 działa tylko przed utworzeniem wykresu. Dziękuję Ci. Zgadzam się z @Scott Gigante, to powinna być odpowiedź!
Mateus da Silva Teixeira
42

Istnieje również kilka nazwanych rozmiarów czcionek , oprócz wielkości w punktach:

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

Stosowanie:

pyplot.legend(loc=2, fontsize = 'x-small')
Mathias711
źródło
19

Istnieje wiele ustawień dostosowywania rozmiaru legendy. Dwie najbardziej przydatne dla mnie to:

  • odstępy między etykietami: ustawia odstępy między wpisami etykiet w wielokrotnościach wielkości czcionki. Na przykład czcionka 10-punktowa legend(..., labelspacing=0.2)zmniejszy odstęp między wpisami do 2 punktów. Domyślnie w mojej instalacji wynosi około 0,5.
  • prop: która pozwala na pełną kontrolę wielkości czcionki itp. Możesz ustawić 8-punktową czcionkę za pomocą legend(..., prop={'size':8}). Domyślnie w mojej instalacji jest około 14 punktów.

Ponadto dokumentacja legenda wymienia szereg innych parametrów napawania i odstępów w tym: borderpad, handlelength, handletextpad, borderaxespad, i columnspacing. Wszystkie mają tę samą formę co odstępy między etykietami i obszar również w wielokrotnościach rozmiaru czcionki.

Wartości te można również ustawić jako wartości domyślne dla wszystkich liczb za pomocą pliku matplotlibrc .

Bryan P.
źródło
5

Podczas mojej instalacji FontProperties zmienia tylko rozmiar tekstu, ale nadal jest zbyt duży i rozstawiony. Znalazłem parametr w pyplot.rcParams: legend.labelspacing, który Zgaduję jest ustawiony na ułamek rozmiaru czcionki. Zmieniłem to za pomocą

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

Nie jestem pewien, jak określić to w funkcji pyplot.legend - zaliczenie

prop={'labelspacing':0.25}

lub

prop={'legend.labelspacing':0.25}

wraca z błędem.

swint144
źródło
0

plot.legend (loc = „prawy dolny róg”, miejsca dziesiętne = 2, fontsize = „11”, tytuł = „Hej tam”, title_fontsize = '20')

Adarsha Neupane
źródło