Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで凡例のフォント名を変更する方法をわかりやすく解説

Matplotlibでグラフの凡例(legend)のフォント名を変更したい場合、legend.get_texts()で凡例内のテキストオブジェクトを取得し、それぞれに対してフォントを設定することで実現できます。この記事では、具体的な手順とサンプルコードを紹介します。

変更の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。

  • NumPyを使用してx軸のデータポイントを作成します。

  • plot()メソッドを使って x、sin(x)、cos(x) をプロットします。

  • legend()メソッドで凡例を図上に配置します。

  • legend.get_texts()を反復処理し、各テキストオブジェクトに対してset_fontname()でフォント名を更新します。

  • show()メソッドを実行して図を表示します。

サンプルコード

import numpy as np
from matplotlib import pyplot as plt

# 図のサイズとレイアウトの自動調整を設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# xデータポイントを作成
x = np.linspace(-5, 5, 100)

# sin(x) と cos(x) をプロット
plt.plot(x, np.sin(x), label="$y=sin(x)$")
plt.plot(x, np.cos(x), label="$y=cos(x)$")

# 凡例を右上に配置
legend = plt.legend(loc='upper right')

# 凡例のテキストを反復処理してラベル名とフォント名を更新
i = 1
for t in legend.get_texts():
    t.set_text("name %d" % i)
    t.set_fontname("serif")
    i += 1

plt.show()

出力結果

Matplotlibで凡例のフォント名を変更する方法をわかりやすく解説

補足:prop引数を使う方法

よりシンプルにフォントをまとめて指定したい場合は、legend()メソッドのprop引数を利用する方法もあります。以下のように記述すると、凡例全体のフォントファミリーを一括で変更できます。

legend = plt.legend(loc='upper right',
                    prop={'family': 'serif', 'size': 10})

個別にラベルごとに異なる設定を行いたい場合はget_texts()を使う方法が便利で、凡例全体をまとめて制御したい場合はprop引数が適しています。用途に応じて使い分けるとよいでしょう。

  1. Matplotlibのプロット凡例にテキストラベルだけを表示する方法

    Matplotlibでプロットの凡例にテキストラベルだけを表示したい場合は、legend()メソッドにhandlelength=0、handletextpad=0、fancybox=Trueといった引数を指定します。これにより、通常は凡例の左側に表示される線やマーカーなどのハンドル(サンプルグラフィック)が非表示になり、ラベルのテキストのみがすっきりと表示されます。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用してランダムな x および y のデータポイントを作成します。subplots()メソッドを使って、図とサブプロットのセットを作成しま

  2. Matplotlibで凡例ボックスのサイズを調整する方法

    Matplotlibの凡例ボックスのサイズを調整するには、legend()メソッドのborderpad引数を使用します。borderpadの値を大きくするほど、凡例ボックス内の余白が広がり、ボックス全体のサイズも大きくなります。手順異なる線幅(linewidth)を持つ2つのリストを使って、line1とline2を作成します。図に凡例を配置し、凡例ボックスのサイズを調整するために、legend()メソッドでborderpad=2を指定します。図を表示するには、show()メソッドを使用します。サンプルコードfrom matplotlib import pyplot as plt plt.rcP