グラフタイトル付け方まとめ【複数グラフもOK】【matplotlib】

matplotlibのグラフタイトルの記事のアイキャッチmatplotlib

タイトルの付け方

タイトルをつけるには
plt.title() or ax.set_title()
を用います。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10, 0.01)
y = np.sin(x)

plt.plot(x, y)
plt.title('sin function')
plt.show()
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10, 0.01)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot()
ax.plot(x, y)
ax.set_title('sin function')

plt.show()
タイトル付きグラフ

タイトルの位置

デフォルトのタイトル位置が気に入らなければ変更することもできます。

横方向

タイトルの横位置を変えるにはタイトルを設定する際に、loc引数を与えてやればOK

locには{'left', 'center', 'right'} の3種類を指定することができ、デフォルトは'center'です。

plt.title('sin function', loc='right') #pyplotインターフェース

ax.set_title('sin function', loc='right') #オブジェクト指向インターフェース
タイトル右よせ

またタイトルの横位置を細かく指定したければx引数に数値を与えることで調整することができます。

plt.title('sin function', x=1.0) #pyplotインターフェース

ax.set_title('sin function', x=1.0) #オブジェクト指向インターフェース
横位置の微調整

縦方向

タイトルの縦方向はyで調整することができます。

plt.title('sin function', y=-0.3) #pyplotインターフェース

ax.set_title('sin function', y=-0.3) #オブジェクト指向インターフェース
タイトル縦方向

他にもpadでも縦位置を指定可能です。
padは上軸からのオフセットを設定するもので、おそらくマイナスは設定できません。

縦位置を設定するならyの方が汎用性が高いのでyを使うことをお勧めします。

plt.title('sin function', pad=100.0) #pyplotインターフェース

ax.set_title('sin function', pad=100.0) #オブジェクト指向インターフェース
padで縦方向

タイトルの外見

タイトルはfontdictで装飾が可能です

style_dict = {
    'fontsize' : 30,
    'fontweight' : 'bold',
    'color' : 'blue'
}

ax.set_title('sin function', fontdict=style_dict) #pyplotインターフェース

plt.title('sin function', fontdict=style_dict) #オブジェクト指向インターフェース
外見を変更

他にもTextオブジェクトのプロパティを設定可能で、一覧は以下に掲載されています

matplotlib.text — Matplotlib 3.7.1 documentation

複数グラフでのタイトル (個別 & 全体タイトル)

複数グラフになったとしても、一つ一つのグラフへのタイトル設定のやり方は変わりません
plt.title()を実行してやればOKです

ただ、グラフ同士の間隔によってタイトルとグラフが被ってしまうので、グラフ間隔を調整しておきましょう

複数グラフの全体へのタイトル設定はplt.suptitle()で設定ができます。

import matplotlib.pyplot as plt
import numpy as np

#データ
x = np.arange(-10, 10, 0.01)
ys = [np.sin(x), np.cos(x), np.mod(x, 3), np.exp(x)]

#グラフ
plt.subplots_adjust(hspace=0.5, wspace=0.4)

#全体のタイトル
plt.suptitle('mathmatic functions')

#plot & 個別のタイトル
for i, y in enumerate(ys):
    plt.subplot(2, 2, i+1)
    plt.plot(x, y)
    plt.title(i+1)
    
plt.show()
複数グラフの総タイトル

オブジェクト指向な人はこちらのコードをどうぞ

import matplotlib.pyplot as plt
import numpy as np

#データ
x = np.arange(-10, 10, 0.01)
ys = [np.sin(x), np.cos(x), np.mod(x, 3), np.exp(x)]

#グラフ
fig = plt.figure()
fig.subplots_adjust(hspace=0.5, wspace=0.4)

#全体のタイトル
fig.suptitle('mathmatic functions')

#plot & 個別のタイトル
for i, y in enumerate(ys):
    ax = fig.add_subplot(2, 2, i+1)
    ax.plot(x, y)
    ax.set_title(i+1)
    
plt.show()

コメント