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