Matplotlib에서 그림 제목 및 축 레이블 글꼴 크기를 어떻게 설정합니까?


530

Matplotlib에서 다음과 같이 그림을 만들고 있습니다.

from matplotlib import pyplot as plt

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')

그림 제목과 축 레이블의 글꼴 크기를 지정하고 싶습니다. 세 가지 모두 다른 글꼴 크기가되어야하므로 전역 글꼴 크기 ( mpl.rcParams['font.size']=x)를 설정하는 것이 원하는 것이 아닙니다. 그림 제목과 축 레이블의 글꼴 크기를 개별적으로 설정하려면 어떻게합니까?


1
궁금해서 추가 mpl.rcParams['font.size'] = 20하고 10과 14로 값을 변경해 보았습니다. 먼저로 변경하지 않으면 오류가 발생 mpl했습니다 plt. 이 변경으로 오류가 해결되었지만 코드 줄이 제목이나 레이블에 영향을 미치지 않았습니다. 이 구문이 맞습니까?
TMWP

이제 허용 된 답변에 대한 의견에서 문제가 내 수입 명세서 일 수 있다고 생각하지만 명령을 가져 오지 않으면 오류가 발생하지 않는 이유는 무엇입니까? mpl명령을 테스트 할 때 사용한 다른 가져 오기 라인이 있습니까?
TMWP

답변:


772

같은 텍스트 처리 기능 label, title등 같은 매개 변수를 허용 matplotlib.text.Text. 글꼴 크기의 경우 다음을 사용할 수 있습니다 size/fontsize.

from matplotlib import pyplot as plt    

fig = plt.figure()
plt.plot(data)
fig.suptitle('test title', fontsize=20)
plt.xlabel('xlabel', fontsize=18)
plt.ylabel('ylabel', fontsize=16)
fig.savefig('test.jpg')

전 세계적으로 설정 들어 titlelabel크기, mpl.rcParams포함 axes.titlesize하고 axes.labelsize. (페이지에서) :

axes.titlesize      : large   # fontsize of the axes title
axes.labelsize      : medium  # fontsize of the x any y labels

(내가 아는 한, 크기를 별도로 설정 x하고 y레이블 을 지정할 수있는 방법이 없습니다 .)

그리고 그것은 axes.titlesize영향을 미치지 않습니다 참조하십시오 suptitle. 수동으로 설정해야한다고 생각합니다.


감사! (suptitle, xlabel, ylabel)에 대해 전역 적으로 명시 적으로 설정하는 방법이 있습니까? 나는 ... 차트를 많이 만드는 그냥 한 번 지정할 있어요
vasek1

@ vasek1 : 전역 설정을 원하지 않는다고 생각했습니다. :). 이를 위해 당신은 필요합니다 mpl.rcParams. 내 답변을 편집했습니다.
Avaris

16
: 솔루션을 찾고 자신과 같은 다른 사람은 titlesize를 변경하는 방법plt.rcParams.update({'axes.titlesize': 'small'})
tommy.carstensen

로부터 rcParams링크 사용 figure.titlesize에 추가 axes.titlesize.
Mad Physicist

1
@AlexanderMcFarlane. 나는 달렸다 python -c 'import matplotlib as mpl; print(mpl.__version__); print("figure.titlesize" in mpl.rcParams.keys())'. 결과는 1.5.1, True. 1) 어떤 버전의 matplotlib을 사용하고 있습니까? 어떤 버전의 파이썬? 2) 어떤 이유로 Py2 에서는 받아들이지 str않지만 버그가 될 수 unicode있습니까?
Mad Physicist

90

rcParams 사전을 통해 전역 적으로이 작업을 수행 할 수도 있습니다.

import matplotlib.pylab as pylab
params = {'legend.fontsize': 'x-large',
          'figure.figsize': (15, 5),
         'axes.labelsize': 'x-large',
         'axes.titlesize':'x-large',
         'xtick.labelsize':'x-large',
         'ytick.labelsize':'x-large'}
pylab.rcParams.update(params)

5
이외의 다른 크기는 무엇입니까 'x-large'?
Martin Thoma

15
'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'. matplotlib.org/api/…
tsando

pylab.rcParams.keys()전체 매개 변수 목록을 보는 데 사용 하십시오.
Nirmal

감사. 전 세계적으로 설정 명시 적 숫자 제목에 대한 크기와 축 라벨 대신 항상 일을 할 수있는 방법이 있나요 ax.set_title('some title', fontsize=15), ax.set_xlabel('some xlabel', fontsize=12)? rcParams문자열 만 허용하는 것 같습니다 .
timgeb 2009 년

4
당신은 또한 숫자를 사용할 수 있습니다 ...'axes.labelsize': 32,
mimoralea

65

ax객체 를 사용 하여 플로팅을 수행 하는 데 더 익숙하다면 ax.xaxis.label.set_size()ipython 터미널에서 기억하기 쉽거나 적어도 탭을 사용하여 쉽게 찾을 수 있습니다. 효과를 확인한 후 다시 그리기 작업이 필요한 것 같습니다. 예를 들면 다음과 같습니다.

import matplotlib.pyplot as plt

# set up a plot with dummy data
fig, ax = plt.subplots()
x = [0, 1, 2]
y = [0, 3, 9]
ax.plot(x,y)

# title and labels, setting initial sizes
fig.suptitle('test title', fontsize=12)
ax.set_xlabel('xlabel', fontsize=10)
ax.set_ylabel('ylabel', fontsize='medium')   # relative to plt.rcParams['font.size']

# setting label sizes after creation
ax.xaxis.label.set_size(20)
plt.draw()

자막 크기를 만든 후에 비슷한 방법을 모릅니다.


fig.suptitle('test title', fontsize = 20)작동하는 것 같습니다. ax.set_xlabel('xlabel', fontsize = 20)' also works, in which case we can do away with ax.xaxis.label.set_size (20)`.
T_T 2016 년

1
@T_T 맞습니다. 이러한 형태는 위의 Avaris의 답변과 비슷합니다. 완전성을 위해 추가하겠습니다. 나는 여전히 ipython plot으로 ax.xaxis.label.set_size()대화 형으로 작업 할 때 유용하게 사용되며 다양한 글꼴 크기에 대한 빠른 시각적 평가를 원합니다.
spinup

도끼 객체와 그림 객체를 사용하는 데 (숨겨진) 차이가 있는지 또는 완전히 동등한 지 알고 있습니까? 일부 기능에 대해 다른 인터페이스가있는 이유는 무엇입니까? (plt.xlabel () vs. ax.set_xlabel ())
normanius

1
@normanius, 위의 예에서 ax와 fig를 의미한다면 그것들은 상당히 다른 객체입니다. fig는 전체 축이며, 여러 축을 포함 할 수 있습니다. 따라서 fig와 ax는 다른 속성을 갖습니다. pyplot 타입 호출과 객체 호출 (예 : 말한 것과 plt.xlabel()비교) 의 차이점에 ax.set_xlabel()있어서 plt.*함수는 현재 축 / 그림 에서 작동 한다는 경고와 동일 합니다. 따라서 여러 축으로 그림을 설정하면 ax1.set_xlabel()혼란을 피하기 위해 명시적인 호출을 사용하는 것이 좋습니다 .
spinup

19

축의 글꼴이 아닌 제목의 글꼴 만 수정하려면 다음을 사용했습니다.

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.add_subplot(111)
ax.set_title('My Title', fontdict={'fontsize': 8, 'fontweight': 'medium'})

fontdict는 matplotlib.text.Text의 모든 kwarg를 허용합니다 .


8

공식 가이드 의 사용은 pylab더 이상 권장되지 않습니다. matplotlib.pyplot대신에 직접 사용해야합니다.

를 통해 전역 적으로 글꼴 크기 설정 rcParams

import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 16
plt.rcParams['axes.titlesize'] = 16

# or

params = {'axes.labelsize': 16,
          'axes.titlesize': 16}
plt.rcParams.update(params)

# or

import matplotlib as mpl
mpl.rc('axes', labelsize=16, titlesize=16)

# or 

axes = {'labelsize': 16,
        'titlesize': 16}
mpl.rc('axes', **axes)

다음을 사용하여 기본값을 복원 할 수 있습니다

plt.rcParams.update(plt.rcParamsDefault)

matplotlib 구성 디렉토리 아래의 디렉토리에 스타일 시트 를 작성하여이를 수행 할 수도 있습니다 (에서 구성 디렉토리를 가져올 수 있음 ). 스타일 시트 형식은stylelibmatplotlib.get_configdir()

axes.labelsize: 16
axes.titlesize: 16

스타일 시트가 있으면 /path/to/mpl_configdir/stylelib/mystyle.mplstyle다음을 통해 사용할 수 있습니다.

plt.style.use('mystyle')

# or, for a single section

with plt.style.context('mystyle'):
    # ...

형식을 공유 하는 matplotlibrc 파일 을 작성 (또는 수정) 할 수도 있습니다.

axes.labelsize = 16
axes.titlesize = 16

에 따라하면 이러한 변경 않은 모든 작업 디렉토리에, 단지 현재 작업 디렉토리에 사용되는 수정 파일 matplotlibrc 하지 matplotlibrc 파일을, 또는 않는 모든 작업 디렉토리 하지 다른 matplotlibrc 파일이없는 곳에 matplotlibrc 파일을 가지고 지정되었습니다. 자세한 내용은 matplotlib 사용자 정의 페이지 의이 섹션 을 참조하십시오.

전체 rcParams키 목록은을 통해 검색 할 수 plt.rcParams.keys()있지만 글꼴 크기를 조정하려면 ( 여기 에서 인용 된 영문 )

  • axes.labelsize- x 및 y 라벨의 폰트 크기
  • axes.titlesize- 축 제목의 글꼴 크기
  • figure.titlesize- 그림 제목 크기 ( Figure.suptitle())
  • xtick.labelsize- 눈금 레이블의 글꼴 크기
  • ytick.labelsize- 눈금 레이블의 글꼴 크기
  • legend.fontsize-범례의 글꼴 크기 ( plt.legend(), fig.legend())
  • legend.title_fontsize-범례 제목의 글꼴 크기 None로 기본 축과 동일하게 설정됩니다. 사용 예는 이 답변 을 참조하십시오 .

모두 문자열 크기 {'xx-small', 'x-small', 'smaller', 'small', 'medium', 'large', 'larger', 'x-large', 'xxlarge'}또는 floatin 을 허용합니다 pt. 문자열 크기는 다음과 같이 지정된 기본 글꼴 크기를 기준으로 정의됩니다.

  • font.size- 텍스트의 기본 글꼴 크기 (pts) 10pt는 표준값입니다

또한 무게는 다음과 같이 지정 될 수 있습니다 (기본적으로 만 표시됨).

  • font.weight-에서 사용하는 글꼴의 기본 가중치입니다 text.Text. 수락 {100, 200, 300, 400, 500, 600, 700, 800, 900}하거나 'normal'(400), 'bold'(700), 'lighter''bolder'( 현재의 중량에 대해 상대적인 ).

2

글꼴 크기를 변경하는 다른 방법은 패딩을 변경하는 것입니다. Python에서 PNG를 저장하면 열리는 대화 상자를 사용하여 레이아웃을 변경할 수 있습니다. 축 사이의 간격, 원하는 경우 패딩을이 단계에서 변경할 수 있습니다.



-3

7 (최고의 솔루션)

 from numpy import*
 import matplotlib.pyplot as plt
 X = linspace(-pi, pi, 1000)

class Crtaj:

    def nacrtaj(self,x,y):
         self.x=x
         self.y=y
         return plt.plot (x,y,"om")

def oznaci(self):
    return plt.xlabel("x-os"), plt.ylabel("y-os"), plt.grid(b=True)

6 (약간 더 나쁜 해결책)

from numpy import*
M = array([[3,2,3],[1,2,6]])
class AriSred(object):
    def __init__(self,m):
    self.m=m

def srednja(self):
    redovi = len(M)
    stupci = len (M[0])
    lista=[]
    a=0
    suma=0
    while a<stupci:
        for i in range (0,redovi):
            suma=suma+ M[i,a]
        lista.append(suma)
        a=a+1
        suma=0
    b=array(lista) 
    b=b/redovi
    return b



OBJ = AriSred(M)
sr = OBJ.srednja()

2
이 코드는 OP의 문제에 대한 해결책을 제공 할 수 있지만이 코드가 질문에 대한 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하는 것이 좋습니다. 비슷한 문제를 겪는 미래의 시청자가 솔루션의 추론을 이해할 수 없기 때문에 코드는 일반적으로 장기적으로 답변 만 쓸모 없게됩니다.
E. Zeytinci
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.