【Matplotlib】日本語を表示する方法

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

タイトルとテキストに日本語を表示する方法

Matplotlibを初期設定のまま使用していると、Axes.title() や Axes.text() の引数に日本語の文字列を渡しても、文字化けしてしまいます。

# MATPLOTLIB_TEXT_JAPANESE

# In[1]

# Figureを作成してAxesを追加
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)

# Axesのタイトルの設定
ax.set_title("文字化けします", size=12)

# Axesにテキストを追加
ax.text(0.5, 0.5, "パイソン", size=40)

matplotlib 日本語の文字化け
タイトルやテキストに日本語を入力するときには、日本語を表示できるフォントファイルをフルパスで指定して FontProperties インスタンスを作成し、それを Axes.title() や Axes.text() の fontproperties に渡す必要があります。

フォントディレクトリのパスを取得

Windowsであれば、次のコードでフォントファイルの入ったディレクトリ(フォルダ)のパスを調べることができます。

# In[2]

from matplotlib import font_manager

# Windowsのフォントディレクトリのパスを取得
fd = font_manager.win32FontDirectory()

print(fd)
# C:\Windows\Fonts

macOS には一般に複数のフォントディレクトリが存在しています。
次のコードでディレクトリのパスの一覧を取得できます。

# In[3]

from matplotlib import font_manager

# macOSのフォントディレクトリ一覧を取得
fd = font_manager.OSXFontDirectories()

print(fd)
# ['/Library/fonts', 'Network/Library/Fonts/', ...]

Windows や macOS において、フォントは .ttf拡張子のついた TrueType Font 形式、もしくは .ttc拡張子のついた TrueType Collection 形式のファイルに保存されています。TrueType Collection ファイルは TrueType Font ファイルを複数個まとめたものです。

日本語を表示するコード

matplotlib.font_manager から FontPropertiesクラスを読み込んで、タイトルとテキストに日本語を表示させるコードです。

# In[4]

from matplotlib.font_manager import FontProperties

# MSゴシック
fp_1 = FontProperties(fname='C:\WINDOWS\Fonts\msgothic.ttc', size=16)

# MS明朝
fp_2 = FontProperties(fname='C:\WINDOWS\Fonts\msmincho.ttc', size=30)

# Figureを作成してAxesを追加
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)

# Axesのタイトルを設定
ax.set_title("日本語を表示", fontproperties=fp_1)

# Axesにテキストを追加
ax.text(0.5, 0.5, "パイソン", fontproperties=fp_2)

matplotlib 日本語を表示

コメント

  1. あとりえこばと より:

    【AIエッセイ】Matplotlibと日本語表示
     
    さて、昨日のMatplotlib冒険記をシェアしよう。俺、Matplotlibでグラフに日本語を表示させるっていうちっちゃな挑戦に挑んでみたんだ。予想以上にドキドキしちゃったんだけど、その経験をシェアしたくてね。
     
    最初は簡単そうだと思って、Matplotlibのプロットに日本語をぶち込もうとしたんだけど、プロット上に日本語が出てこない!ってなっちゃって。最初の解決策として、matplotlib.rcを使ってフォントをいじくることにしたんだけど、それだけじゃダメだったんだよね。

    調査してるうちにわかったのは、Matplotlibには日本語フォントがデフォルトで入ってないってこと。まず、Matplotlibに日本語フォントを追加しないといけないってのがネックだったわけ。最初はmatplotlib.rcParamsを使って日本語フォントを指定してみたんだけど、ダメ。次に、日本語フォントのパスを直接指定してみたけど、それもダメ。ここでちょっと挫折感が・・・。

    で、新しい作戦を練ることにした。システムにインストールされている日本語フォントをMatplotlibが認識できるようにするのが鍵だと気づいた。フォントのパスを指定するんじゃなく、フォントの名前を指定してやればMatplotlibが自分でシステムからフォントを引っ張ってこれるんだよ。

    これで、Matplotlibの日本語表示もなんとかクリアできたよ! まぁ、ちょっとしたトリッキーなポイントはあったけど、最終的には笑い話になったよ。Matplotlibって深いなぁって感じつつ、これからも新しいテクニックをガンガン吸収していきたいな。Keep calm and code on!