HOWTO · Matplotlib

Matplotlib で図のタイトルと軸ラベルのフォントサイズを設定する方法

Matplotlib のタイトルと軸のサイズとフォントは、フォントサイズパラメーター、label.set_size()、および rcParams 辞書を使用して設定できます。

このページの内容

単一のプロットなら、タイトルやラベルを設定する呼び出しに fontsize を渡します。再利用できるデフォルト値を適用するには rcParams を更新し、既存のテキストオブジェクトを個別に変更するには set_size() を呼び出します。例では Axes のタイトルを使用します。Figure 全体のタイトルは別のもので、fig.suptitle() で設定します。

fontsize でタイトルと軸ラベルのサイズを設定する

Axes.set_title()、Axes.set_xlabel()、Axes.set_ylabel() に fontsize を直接渡します。これらの呼び出しで、その Axes のタイトルとラベルを設定できます。Figure 全体の上部にもタイトルを付ける場合は、fig.suptitle() を使い、別の fontsize を指定します。

Matplotlib では、数値で指定するフォントサイズの単位はポイントです。複数の呼び出しで同じ値を使うと統一感が出ます。タイトルを大きくして、視覚的な優先順位を示すこともできます。値はテキストを設定する各呼び出しに渡すため、ほかの箇所を変えずに特定のラベルだけを調整できます。

次の完全な例では、プロットを作成し、Axes のタイトルと2つのラベルを設定したうえで、Figure 全体のタイトルも追加します。レイアウトに合わせてポイント数を調整してください。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x", fontsize=16)
ax.set_xlabel("x", fontsize=12)
ax.set_ylabel("value", fontsize=12)
fig.suptitle("Example figure", fontsize=20)
plt.show()

rcParams でデフォルトのフォントサイズを設定する

rcParams には Matplotlib の設定デフォルトが格納されています。これを更新すると、現在の Python プロセスで後から作成するプロット要素に使われるデフォルト値が変わります。値を一貫して適用したい場合は、プロットを作成する前に設定します。特定のテキストだけ別のサイズにするには、その呼び出しに fontsize を渡してください。

x軸とy軸のラベルには axes.labelsize、Axes のタイトルには axes.titlesize、fig.suptitle() で作る Figure 全体のタイトルには figure.titlesize を使います。最初の2つは Figure タイトル用の設定とは別です。これらのパラメーターには、ポイント数などの数値や、サポートされている名前付きサイズを指定できます。

import matplotlib.pyplot as plt

plt.rcParams.update({
    "axes.labelsize": 12,
    "axes.titlesize": 16,
    "figure.titlesize": 20,
})

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x")
ax.set_xlabel("x")
ax.set_ylabel("value")
fig.suptitle("Example figure")
plt.show()

特定のプロットだけデフォルトを変えたい場合は、matplotlib.rc_context() を使って、コードブロック内で一時的な rcParams 設定を適用できます。これにより、その設定がプロセス内の後続のプロットにデフォルトとして残るのを防げます。

たとえば、with plt.rc_context({"axes.labelsize": 12, "axes.titlesize": 16}): とすると、インデントされたプロット処理の中だけで、この2つの設定が有効になります。ブロックを抜けると Matplotlib は以前の設定に戻します。異なるスタイルのプロットを作成するスクリプトで便利です。

set_size() でタイトルやラベルのサイズを個別に調整する

タイトルや軸ラベルはそれぞれ set_size() メソッドを持つテキストオブジェクトです。プロットを作成した後で変更したい場合や、タイトルとラベルに異なる値を指定したい場合に便利です。次の例では、plt.gca() で現在の Axes を取得し、そのタイトルとラベルのテキストオブジェクトにサイズを設定します。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4])
ax.set_title("Values by x")
ax.set_xlabel("x")
ax.set_ylabel("value")

axes = plt.gca()
axes.title.set_size(16)
axes.xaxis.label.set_size(12)
axes.yaxis.label.set_size(12)
plt.show()

複数の Axes を扱う場合は、変更したい Axes への参照を保持し、ax.title.set_size(16) のように指定してください。plt.gca() に頼ると、その時点で現在の Axes が返されます。Figure 全体のタイトルは fig.suptitle() の呼び出し時にサイズを指定するか、返されたテキストオブジェクトを保持して set_size() を呼び出します。Axes のタイトルは個々のパネルに属し、Figure のタイトルは Figure 全体を表します。