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

6 ответов


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

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

это занимает словарь ключевых слов, соответствующих matplotlib.font_manager.FontProperties свойства. Вижу документация для legend:

аргументы ключевого слова:

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.


Это

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

затем сделайте сюжет после этого.

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

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


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

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

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

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

используя 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')


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

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

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

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


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

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

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

prop={'labelspacing':0.25}

или

prop={'legend.labelspacing':0.25}

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