Как изменить размер легенды с помощью matplotlib.pyplot - PullRequest
256 голосов
/ 19 августа 2011

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

Ответы [ 6 ]

446 голосов
/ 19 августа 2011

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

51 голосов
/ 19 августа 2011

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

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

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

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

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

36 голосов
/ 17 апреля 2015

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

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

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

pyplot.legend(loc=2, fontsize = 'x-small')
34 голосов
/ 13 сентября 2016

с использованием 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')

15 голосов
/ 04 сентября 2012

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

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

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

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

5 голосов
/ 10 января 2012

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

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

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

prop={'labelspacing':0.25}

или

prop={'legend.labelspacing':0.25}

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

...