matplotlib(python)でフォントを変更する方法は?


89

簡単な問題のように聞こえますが、Pythonでmatplotlibを使用して作成されたプロットで、フォント(フォントサイズではなく)を変更する効果的な解決策が見つかりません。

matplotlibがデフォルトフォントを保存しているフォルダ内のいくつかのファイルを変更することでmatplotlibのデフォルトフォントを変更するチュートリアルをいくつか見つけました-このブログ投稿を参照してください-しかし、複数を使用したいので、より根本的な解決策を探していますプロット内のフォント(テキスト、ラベル、軸ラベルなど)。


お役に立ててうれしいです:)このエラーの原因となるコードを投稿できますか?私自身はこのエラーを見たことがありませんが、ここにあなたを助けるかもしれないいくつかのリンクがあります。 matplotlib.1069221.n5.nabble.com/... matplotlib.1069221.n5.nabble.com/Fonts-not-found-td12936.html
aidnani8

問題を生成するコードは次のとおり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年

回答:


103

タイトルにComicSans、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

51

rcParamsフォントファミリーをグローバルに変更するために使用することもできます。

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

matplotlibのフォントファミリー引数のリストはこちらです。


23

私は採用することを好みます:

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

フォントをグローバルに変更するのに最適な方法で、私はこれを探していました。最後の行は必要ありません。Texがこれと何の関係があるのか​​わかりません。:あなたがしたいフォントがmatplotlibのによって発見されていないため、エラーが発生した場合は、このリンクをチェックアウトscentellegher.github.io/visualization/2018/05/02/...
SMCS

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

または

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

9
信じられないほど、これはまさに私が探していたコマンドです。OPが求めていたものではありません

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()などは?
カイルミルズ

1
^自分の質問に答えるために:stackoverflow.com/questions/35668219
カイルミルズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.