Bagaimana mengubah ukuran legenda dengan matplotlib.pyplot

324

Pertanyaan sederhana di sini: Saya mencoba untuk mendapatkan ukuran legenda saya matplotlib.pyplotmenjadi lebih kecil (yaitu, teks menjadi lebih kecil). Kode yang saya gunakan berjalan seperti ini:

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
sumber

Jawaban:

543

Anda dapat mengatur ukuran font individu untuk legenda dengan menyesuaikan propkata kunci.

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

Ini membutuhkan kamus kata kunci yang sesuai dengan matplotlib.font_manager.FontPropertiesproperti. Lihat dokumentasi untuk legenda :

Argumen kata kunci:

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.

Dimungkinkan juga, pada versi 1.2.1 , untuk menggunakan kata kunci fontsize.

Yann
sumber
1
Bisakah Anda memberi tahu saya di mana saya dapat menemukan detail plot.rcParams.update?
pukul
64

Ini harus dilakukan

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

Kemudian lakukan plot setelahnya.

Ada satu ton rcParams lainnya, mereka juga dapat diatur dalam file matplotlibrc.

Mungkin juga Anda bisa mengubahnya lewat sebuah matplotlib.font_manager.FontPropertiesinstance tetapi ini saya tidak tahu caranya. -> lihat jawaban Yann.

Mauro
sumber
2
Ataumatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric
2
yang seharusnya legend.handlelengthbukanlegend.linewidth
Emmet B
Anggota get_default_size () dari FontManager mengembalikan ukuran default. Bagi saya itu 12
guhur
1
Penggunaan "PyLab" tidak dianjurkan lagi: matplotlib.org/faq/…
Hagbard
51

menggunakan import matplotlib.pyplot as plt

Metode 1: tentukan ukuran font saat memanggil legenda (berulang)

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

Dengan metode ini Anda dapat mengatur ukuran font untuk setiap legenda saat pembuatan (memungkinkan Anda memiliki banyak legenda dengan ukuran font yang berbeda). Namun, Anda harus mengetik semuanya secara manual setiap kali Anda membuat legenda.

(Catatan: @ Mathias711 mencantumkan fontsizes bernama tersedia dalam jawabannya)

Metode 2: tentukan ukuran font di rcParams (nyaman)

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

Dengan metode ini Anda mengatur ukuran legenda font default, dan semua legenda akan secara otomatis menggunakannya kecuali jika Anda menentukan sebaliknya menggunakan metode 1. Ini berarti Anda dapat mengatur ukuran legenda font Anda di awal kode Anda, dan tidak khawatir tentang pengaturannya untuk setiap legenda individu .

Jika Anda menggunakan ukuran bernama misalnya 'medium', maka teks legenda akan berskala dengan global font.sizein rcParams. Untuk mengubah font.sizepenggunaanplt.rc(font.size='medium')

binnev
sumber
1
Sekadar menginformasikan pemula Python (seperti saya): Metode 1 hanya berfungsi setelah membuat plot (setelah baris plot) dan Metode 2 hanya berfungsi sebelum membuat plot. Terima kasih. Saya setuju dengan @Scott Gigante, ini seharusnya jawabannya!
Mateus da Silva Teixeira
42

Ada juga beberapa ukuran font bernama , selain dari ukuran dalam poin:

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

Pemakaian:

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

Ada beberapa pengaturan untuk menyesuaikan ukuran legenda. Dua hal yang menurut saya paling berguna adalah:

  • labelspacing: yang mengatur jarak antara entri label dalam kelipatan ukuran font. Misalnya dengan font 10 poin,legend(..., labelspacing=0.2) akan mengurangi jarak antara entri menjadi 2 poin. Default pada instalasi saya adalah sekitar 0,5.
  • prop: yang memungkinkan kontrol penuh dari ukuran font, dll. Anda dapat mengatur font 8 titik menggunakan legend(..., prop={'size':8}). Default pada instalasi saya adalah sekitar 14 poin.

Selain itu, legenda dokumentasi daftar sejumlah parameter padding dan spacing lainnya termasuk: borderpad, handlelength, handletextpad, borderaxespad, dan columnspacing. Ini semua mengikuti bentuk yang sama dengan labelspacing dan area juga dalam beberapa ukuran font.

Nilai-nilai ini juga dapat ditetapkan sebagai default untuk semua angka menggunakan file matplotlibrc .

Bryan P
sumber
5

Pada instalasi saya, FontProperties hanya mengubah ukuran teks, tetapi masih terlalu besar dan berjarak. Saya menemukan parameter dalam pyplot.rcParams: legend.labelspacing, yang aku menebak diatur untuk sebagian kecil dari ukuran font. Saya sudah mengubahnya dengan

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

Saya tidak yakin bagaimana menentukannya ke fungsi pyplot.legend - passing

prop={'labelspacing':0.25}

atau

prop={'legend.labelspacing':0.25}

kembali dengan kesalahan.

swint144
sumber
0

plot.legend (loc = 'kanan bawah', decimal_places = 2, fontsize = '11', title = 'Hei,', title_fontsize = '20')

Adarsha Neupane
sumber