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.


1
어디에서 자세한 정보를 찾을 수 plot.rcParams.update있습니까?
haccks

64

이것은해야한다

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

그런 다음 그 줄거리를 수행하십시오.

다른 rcParam이 많이 있으며 matplotlibrc 파일에서 설정할 수도 있습니다.

또한 matplotlib.font_manager.FontProperties인스턴스를 전달하여 인스턴스를 변경할 수 있지만 어떻게 해야할지 모르겠습니다. -> Yann의 답변 참조.


2
또는matplotlib.rc('legend', fontsize=0.5, linewidth=2)
Eric

2
해야한다는 legend.handlelength대신legend.linewidth
개미 B

FontManager의 get_default_size () 멤버는 기본 크기를 반환합니다. 나를 위해 그것은 12
guhur

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.sizein에 맞게 크기가 조정 됩니다 rcParams. font.size사용 을 변경 하려면plt.rc(font.size='medium')


1
파이썬 초보자에게 나에게 알리기 위해 : 방법 1은 플롯을 만든 후에 만 ​​작동하고 (plot () 줄 뒤에는) 방법 2는 플롯을 만들기 전에 만 작동합니다. 감사합니다. @Scott Gigante에 동의합니다. 이것이 답이되어야합니다!
Mateus da Silva Teixeira

42

포인트 크기와는 별도로 이름이 지정된 fontsizes 도 있습니다 .

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

용법:

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

19

범례 크기를 조정하기위한 여러 설정이 있습니다. 가장 유용한 두 가지는 다음과 같습니다.

  • labelspacing : 글꼴 크기의 배수로 레이블 항목 사이의 간격을 설정합니다. 예를 들어 10 포인트 글꼴 legend(..., labelspacing=0.2)을 사용하면 항목 사이의 간격이 2 포인트로 줄어 듭니다. 설치시 기본값은 약 0.5입니다.
  • prop : 글꼴 크기 등을 완전히 제어 할 수 있습니다 legend(..., prop={'size':8}).을 사용하여 8 포인트 글꼴을 설정할 수 있습니다 . 설치시 기본값은 약 14 포인트입니다.

또한 전설의 문서 목록을 포함하여 다른 패딩 및 간격 매개 변수의 수 : borderpad, handlelength, handletextpad, borderaxespad,와 columnspacing. 이것들은 모두 labelpacing과 같은 형식을 따르고 글꼴 크기의 배수로도 사용됩니다.

이 값을 사용하여 모든 수치의 기본값으로 설정할 수도 있습니다. 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}

오류가 발생했습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.