【matplotlib】凡例の中に日本語タイトルを表示する方法【Python】

matplotlib のグラフで、凡例はんれいの中に、日本語タイトルを表示する方法です。

凡例の中に『日本語タイトル』を追加するときは、セットタイトル set_title() を使います。

これで、以下のようなグラフが出せました。

凡例に日本語タイトルを表示

枠の中に『事業別の売上高』と表示できています。

このセットタイトルメソッドは、ax.legend() の戻り値に用意されていました。

その使い方を紹介します。

さて、マットプロットリブの『レジェンド設定』にも、タイトル文字列を受け取るところがあったのですが、日本語フォントの設定が健康事業・美容事業・不動産事業にしか効きませんでした。

以下のように設定しても、『事業別の売上高』が文字化けしてしまいました。

ax.legend(title='事業別の売上高', prop=fp_legend)

《レジェンド(legend) とは、凡例(はんれい)のことでした。》

どうやら、『データ系列のフォント設定』と『タイトルのフォント設定』は、分かれているようでした。

公式マニュアルを調べたところ、凡例タイトル用のメソッドが用意されていました。

以下のようにしたら、日本語タイトルのフォント設定ができて、『事業別の売上高』が出せました。

legend = ax.legend(prop=fp_legend_data)
legend.set_title('事業別の売上高', prop=fp_legend_title)

以下が公式マニュアルのページです。

(Matplotlib) set_title(self, title, prop=None)

Python のサンプルコードを書きました。

凡例の枠の中に、日本語タイトルを表示するコードです。

冒頭のグラフを描くのに使用しました。

ファイルパスなどは、個々の環境に合わせて変更してください。

日本語フォントは、Google Noto Fonts の中の『Noto Sans CJK JP』を使用しました。

(Google) Google Noto Fonts

"""add_legend_title_jp.py"""
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties

def main():
    """テスト"""
    # フォントファイル
    font_file = r'D:\project\font\NotoSansCJKjp-hinted\NotoSansCJKjp-Regular.otf'

    # フォントプロパティ
    fp_legend_data = FontProperties(
                style='normal', weight='regular', size=10, fname=font_file)
    fp_legend_title = FontProperties(
                style='normal', weight='regular', size=12, fname=font_file)

    # 作図して表示 & 保存
    (fig, ax) = plt.subplots(ncols=1, nrows=1)
    try:
        # テスト画像生成
        x  = [ 1,  2,  3,  4]
        y1 = [ 3, 9,  27, 81]
        y2 = [15, 30, 45, 60]
        y3 = [10, 15, 20, 25]

        ax.set_xlim(0, 5)
        ax.set_ylim(0, 100)

        # プロット & 日本語ラベル設定
        ax.plot(x, y1, label='健康事業', lw=3, alpha=0.6, marker='o', ms=8)
        ax.plot(x, y2, label='美容事業', lw=3, alpha=0.6, marker='o', ms=8)
        ax.plot(x, y3, label='不動産事業', lw=3, alpha=0.6, marker='o', ms=8)

        ax.grid()

        # データ系列の凡例設定(フォントプロパティ指定) & レジェンドインスタンス取得
        legend = ax.legend(loc=2, framealpha=1.0, prop=fp_legend_data)

        # 凡例の中に日本語タイトルを追加 & フォントプロパティ指定
        legend.set_title('事業別の売上高', prop=fp_legend_title)

        fig.set_dpi(100)
        fig.set_figwidth(3.6)
        fig.set_figheight(3.6)

        # 表示
        plt.show()

        # 保存
        fig.savefig(r'D:\project\data_plot\add_legend_title_jp.png')
    finally:
        plt.close('all')
    return


if __name__ == '__main__':
    main()

メインのグラフタイトルが企業名などで埋まってると、データの分類とか、そういった説明を載せるところに迷うんですよね。

それで、はじめは『事業別の売上高:健康事業、事業別の売上高:美容事業、…』などと表示していたのですが、凡例の中にタイトルが設定できると知って、上記のサンプルコードを書きました。

作図の参考になれば幸いです。

タイトルとURLをコピーしました