Как изменить размер легенды с помощью matplotlib.pyplot

Простой вопрос здесь: Я пытаюсь получить размер моей легенды, используя 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)

Ответ 1

Вы можете установить индивидуальный размер шрифта для легенды, установив ключевое слово 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.

Ответ 2

Это должно сделать

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

Затем выполните график позже.

Есть тонна других rcParams, они также могут быть установлены в файле matplotlibrc.

Также предположительно вы можете изменить его, передав экземпляр matplotlib.font_manager.FontProperties, но это я не знаю, как это сделать. → см. ответ Янна.

Ответ 3

Есть также несколько названных шрифтов, кроме размера в точках:

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

Использование:

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

Ответ 4

с помощью 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

С помощью этого метода вы устанавливаете шрифт по умолчанию fontsize, и все легенды будут автоматически использовать это, если вы не указали иначе, используя метод 1. Это означает, что вы можете установить свой условный шрифт в начале вашего кода и не беспокоиться о его настройке каждая отдельная легенда.

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

Ответ 5

Существует несколько настроек для настройки размера легенды. Эти два наиболее полезных из них:

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

Кроме того, документация по легенде содержит список других параметров заполнения и интервала, включая: borderpad, handlelength, handletextpad, borderaxespad и columnspacing. Все они соответствуют той же форме, что и меток ярлыков, а также области, также кратные шрифтам.

Эти значения также могут быть установлены как значения по умолчанию для всех цифр, используя matplotlibrc file.

Ответ 6

В моей установке FontProperties изменяет только размер текста, но он все еще слишком большой и разнесен. Я нашел параметр в pyplot.rcParams: legend.labelspacing, который, как я предполагаю, установлен на долю размера шрифта. Я изменил его с помощью

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

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

prop={'labelspacing':0.25}

или

prop={'legend.labelspacing':0.25}

возвращается с ошибкой.