Як змінити розмір легенди за допомогою matplotlib.pyplot


324

Просте запитання тут: я намагаюся отримати розмір моєї легенди, використовуючи 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)

Відповіді:


543

Ви можете встановити індивідуальний розмір шрифту для легенди, скоригувавши propключове слово.

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

Для цього потрібен словник ключових слів, що відповідають matplotlib.font_manager.FontPropertiesвластивостям. Дивіться документацію для легенди :

Аргументи ключових слів:

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.

З версії 1.2.1 також можливо використовувати ключове слово fontsize.


1
Не могли б ви сказати мені, де я можу знайти деталі plot.rcParams.update?
хаки

64

Це має робити

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

Потім зробіть сюжет згодом.

Є багато інших rcParams, їх також можна встановити у файлі matplotlibrc.

Також, імовірно, ви можете змінити його, передаючи matplotlib.font_manager.FontPropertiesекземпляр, але цього я не знаю, як це зробити. -> див відповідь Янна.


2
Абоmatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Ерік

2
це має бути legend.handlelengthзамістьlegend.linewidth
Еммет Б

Член get_default_size () з FontManager повертає стандартний розмір. Для мене це 12
гур

1
Використання «PyLab» не рекомендується більше: matplotlib.org/faq / ...
Хагбард

51

використовуючи import matplotlib.pyplot as plt

Спосіб 1: вкажіть розмір шрифту при виклику легенди (повторювана)

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

За допомогою цього методу ви можете встановити розмір шрифту для кожної легенди під час створення (дозволяючи мати декілька легенд з різними розмірами шрифтів). Однак вам доведеться вводити все вручну кожного разу, коли створюєте легенду.

(Примітка: @ Mathias711 у своїй відповіді вказав доступні названі шрифти)

Спосіб 2: вкажіть розмір шрифту в rcParams (зручно)

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

За допомогою цього методу ви встановлюєте розмір шрифтів за замовчуванням, і всі легенди автоматично використовуватимуть його, якщо ви не вкажете інше, використовуючи метод 1. Це означає, що ви можете встановити розмір шрифту легенди на початку коду, і не турбуватися про встановлення його для кожної окремої легенди .

Якщо ви використовуєте названий розмір, наприклад 'medium', текст легенди буде масштабуватись із загальним font.sizeв rcParams. Щоб змінити font.sizeвикористанняplt.rc(font.size='medium')


1
Просто для того, щоб повідомити початківців Python (як я): Метод 1 працює лише після створення сюжету (після рядка plot ()), а метод 2 працює лише до створення сюжету. Дякую. Я погоджуюся з @Scott Gigante, це повинна бути відповідь!
Матеус да Сілва Тейшейра

42

Крім розміру в точках , також є кілька названих шрифтів :

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

Використання:

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

19

Існує кілька налаштувань для регулювання розміру легенди. Два, які я вважаю найбільш корисними, це:

  • пробіл міток: який встановлює інтервал між записами міток у кратних розмірах шрифту. Наприклад, шрифт у 10 балів legend(..., labelspacing=0.2)зменшить інтервал між записами до 2 балів. За замовчуванням на моїй установці близько 0,5.
  • опора: яка дозволяє повністю контролювати розмір шрифту тощо. Ви можете встановити 8-кратний шрифт, використовуючи legend(..., prop={'size':8}). За замовчуванням на моїй установці близько 14 балів.

Крім того, легенда документації перерахований ряд інших відступів і розпірних параметрів , включаючи: borderpad, handlelength, handletextpad, borderaxespad, і columnspacing. Усі вони дотримуються тієї ж форми, що і проміжок міток, а також площа у кратних розмірах шрифтів.

Ці значення також можна встановити за замовчуванням для всіх фігур, використовуючи файл matplotlibrc .


5

У моєму встановленні FontProperties змінює лише розмір тексту, але він все ще занадто великий і розміщений на відстані. Я знайшов параметр у pyplot.rcParams:, legend.labelspacingякий, напевно, встановлений на частку розміру шрифту. Я це змінив

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

Я не впевнений, як вказати його на функцію pyplot.legend - передача

prop={'labelspacing':0.25}

або

prop={'legend.labelspacing':0.25}

повертається з помилкою.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.