Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するにはどうすればよいですか?


531

私はこのような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')

図のタイトルと軸ラベルのフォントサイズを指定したい。3つすべてを異なるフォントサイズにする必要があるため、グローバルフォントサイズ(mpl.rcParams['font.size']=x)を設定することは望んでいません。図のタイトルと軸ラベルのフォントサイズを個別に設定するにはどうすればよいですか?


1
気になるので、を追加してmpl.rcParams['font.size'] = 20、値を10と14に変更mplしてみました。まず、に変更しないとエラーが発生することがわかりましたplt。この変更によりエラーは解消されましたが、コード行は私のタイトルやラベルに影響を与えませんでした。この構文は正しいですか?
TMWP 2017年

今、私は受け入れられた回答のコメントから、問題がインポート文である可能性があると考えていますが、コマンドをインポートしなかった場合にエラーがスローされない理由は私を超えています。mplコマンドのテスト時に使用した別のインポート行はありますか?
TMWP 2017年

回答:


774

、などのテキストを処理する関数labeltitle、と同じパラメータを受け入れます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.titlesizeaxes.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 2012

16
タイトルサイズを変更するための解決策を探している私のような他の人に: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.1Trueです。1)使用しているmatplotlibのバージョンは何ですか?Pythonのバージョンは何ですか?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'ますか?
マーティントーマ2017年

15
「xx-small」、「x-small」、「small」、「medium」、「large」、「x-large」、「xx-large」。matplotlib.org/api/…を
tsando

pylab.rcParams.keys()パラメータの完全なリストを表示するために使用します。
通常の

ありがとう。グローバルに設定明示的な数値タイトルのサイズと軸ラベルの代わりに、常にやってする方法はありますかax.set_title('some title', fontsize=15)ax.set_xlabel('some xlabel', fontsize=12)rcParams文字列しか受け付けないようです。
timgeb

4
数字を使用することもできます...'axes.labelsize': 32,
ミモレラ

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 2018年

1
@T_Tそのとおりであり、これらのフォームは上記のAvarisの回答に似ています。完全を期すために追加します。ipythonプロットをax.xaxis.label.set_size()インタラクティブに操作していて、さまざまなフォントサイズをすばやく視覚的に評価したい場合にも、まだ用途があります。
スピンアップ

axオブジェクトとFigureオブジェクトの使用に(非表示の)違いがあるか、または完全に同等であるかを知っていますか?一部の機能に異なるインターフェースがあるのはなぜですか?(plt.xlabel()対ax.set_xlabel())
normanius

1
@normanius、上の例でaxとfigを意味する場合、それらはまったく異なるオブジェクトです-figは全体の図であり、複数の軸を含む場合があります。したがって、イチジクと斧は異なる特性を持っています。(例えばpyplotタイプの呼び出しとオブジェクトの呼び出しの間の差の面では plt.xlabel()ax.set_xlabel()あなたが言うように)、彼らがいることを警告して、等価ですplt.*機能は、上で動作する現在の軸/フィギュア。したがって、複数の軸を持つFigureを設定する場合は、ax1.set_xlabel()混乱を避けるために、明示的な呼び出しを使用することをお勧めします。
スピンアップ

20

タイトルのフォントのみを変更する(軸のフォントは変更しない)ために、私はこれを使用しました:

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からすべてのkwargsを受け入れます。


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で与えられたテキストのデフォルトのフォントサイズ、。10 ptが標準値です

さらに、次の方法で重みを指定できます(表示されるデフォルトの場合のみ)。

  • 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.