Как изменить размер легенды с помощью 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.

Yann
источник
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экземпляр, но я не знаю, как это сделать. -> см. ответ Янна.

Mauro
источник
2
Илиmatplotlib.rc('legend', fontsize=0.5, linewidth=2)
Эрик
2
это должно быть legend.handlelengthвместоlegend.linewidth
Эммет Б
Член get_default_size () FontManager возвращает размер по умолчанию. Для меня это 12
Гухур
1
Использование «PyLab» больше не поощряется: matplotlib.org/faq/…
Hagbard
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')

binnev
источник
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')
Mathias711
источник
19

Есть несколько настроек для настройки размера легенды. Два, которые я считаю наиболее полезными:

  • labelpacing: устанавливает интервал между записями меток, кратный размеру шрифта. Например, с шрифтом в 10 пунктов, legend(..., labelspacing=0.2)интервал между записями уменьшится до 2 пунктов. Значение по умолчанию для моей установки составляет около 0,5.
  • prop: который позволяет полностью контролировать размер шрифта и т. д. Вы можете установить 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}

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

swint144
источник
0

plot.legend (loc = «нижний правый», decimal_places = 2, fontsize = «11», title = «Привет», title_fontsize = «20»)

Адарша Неупане
источник