matplotlib (python)에서 글꼴을 변경하는 방법은 무엇입니까?


84

쉬운 문제로 들리지만 파이썬에서 matplotlib로 만든 플롯에서 글꼴 (글꼴 크기가 아님)을 변경하는 효과적인 해결책을 찾지 못했습니다.

matplotlib가 기본 글꼴을 저장하는 폴더의 일부 파일을 수정하여 matplotlib의 기본 글꼴을 변경하는 몇 가지 자습서를 찾았습니다. 이 블로그 게시물을 참조하십시오. 하지만 둘 이상을 사용하고 싶기 때문에 덜 급진적 인 솔루션을 찾고 있습니다 내 플롯의 글꼴 ​​(텍스트, 레이블, 축 레이블 등).


도움이되어 기쁩니다 :)이 오류를 일으키는 코드를 게시 할 수 있습니까? 이 오류를 직접 본 적이 없지만 여기에 도움이 될 수있는 몇 가지 링크가 있습니다. matplotlib.1069221.n5.nabble.com/… matplotlib.1069221.n5.nabble.com/Fonts-not-found-td12936.html
aidnani8 2014-01-24

문제를 생성하는 코드는 다음 hfont = {'fontname':'Helvetica'} plt.annotate('Country ', (0.17,0.95), xytext=None, xycoords='figure fraction',size=28, color='red', horizontalalignment = 'left', **hfont)과 같습니다. /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/m‌​atplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))대신 예제에서와 같이 글꼴 이름 Comic Sans MS로 사용하면 코드가 작동합니다.
SirC 2014 년

답변:


98

제목에는 Comic Sans를, x 레이블에는 Helvetica를 원한다고 가정 해 보겠습니다.

csfont = {'fontname':'Comic Sans MS'}
hfont = {'fontname':'Helvetica'}

plt.title('title',**csfont)
plt.xlabel('xlabel', **hfont)
plt.show()

1
나는 시도하고 작동합니다! 내가 찾던 바로 그것입니다. 그러나 일부 글꼴의 경우 다음 오류 메시지가 표시됩니다 (전부는 아님) /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext])). matplotlib에 알려진 글꼴 세트에 Helvetica를 어떻게 설치할 수 있습니까?
SirC 2014 년

4
fontList.cache 파일을 찾으면 거기에 나열된 파일 만 사용할 수 있습니다. 또는 여기를보십시오 stackoverflow.com/questions/20206906/…
B.Kocis

3
위의 의견에 대한 후속 조치. fontList.cache 파일을 찾으려면 matplotlib.get_cachedir ()
CS

48

를 사용 rcParams하여 글꼴 모음을 전역으로 변경할 수도 있습니다 .

 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font

matplotlib의 글꼴 패밀리 인수 목록은 여기에 있습니다 .


19

다음을 선호합니다.

from matplotlib import rc
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)

8
import pylab as plb
plb.rcParams['font.size'] = 12

또는

import matplotlib.pyplot as mpl
mpl.rcParams['font.size'] = 12

9
믿을 수 없을 정도로 충분히 이것이 제가 찾던 명령입니다. 확실히 OP가 요구했던 것이 아닙니다
blue

2

Helvetica 글꼴은 Windows에 포함되어 있지 않으므로 사용하려면 .ttf 파일로 다운로드해야합니다. 그런 다음 다음과 같이 matplotlib를 참조 할 수 있습니다 ( "crm10.ttf"를 파일로 대체).

import os
from matplotlib import font_manager as fm, rcParams
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

fpath = os.path.join(rcParams["datapath"], "fonts/ttf/cmr10.ttf")
prop = fm.FontProperties(fname=fpath)
fname = os.path.split(fpath)[1]
ax.set_title('This is a special font: {}'.format(fname), fontproperties=prop)
ax.set_xlabel('This is the default font')

plt.show()

print(fpath) .ttf를 어디에 넣어야하는지 보여줄 것입니다.

여기에서 출력을 볼 수 있습니다 : https://matplotlib.org/gallery/api/font_file.html


설정 할 수있는 방법이 있습니까 fontproperties당신이 예에 대한 모든 호출을 지정하지 않아도 전 세계적으로 set_title(), set_xlabel()등?
Kyle Mills

1
^ 내 자신의 질문에 대답하려면 : stackoverflow.com/questions/35668219
카일 밀스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.