matplotlib/seabornで日本語表示する楽な方法(文字化け解消)

Pythonでグラフ描画をする際、困るのが日本語ラベルの文字化けです。日本語の文字化けを治す方法を調査した結果、japanize_matplotlibを使うのが一番簡単そうでした。本記事では、このライブラリを使ってmatplotlib/seaborn/seaborn objectで日本語表示させる具体的な方法について解説します。この方法環境依存も少なく、Google Colabなどでも日本語表示可能でした。
日本語を表示したい
Pythonでグラフを描画する場合、matplotlibまたはseabornを使うことが多いかと思います。これらのライブラリでは、デフォルトでは日本語を表示することができず、日本語は豆腐のような四角が表示されてしまいます。
日本語を表示したい場合は、設定をする必要がありますが、japanize_matplotlibを利用することで簡単にグラフ中で日本語を使うことができるようになります

Google Colab環境でも問題なく使えました。環境依存はなさそうです
この記事では、matplotlib, seaborn, seaborn.objectsで日本語を利用する方法を解説します。
japanize_matplotlibのインストール
インストール
japanize_matplitlibのインストールはpipで行うことができます
pip install japanize-matplotlib
インポート
matplotlibやseabornをimportした後に、japanize_matplotlibをimportします。
import matplotlib.pyplot as plt
import japanize_matplotlib

japanize_matplotlibをインポートした後に、フォント設定が変化する関数を呼び出すと日本語が表示されなくなります。例えば、seabornのsns.set()
などを呼び出すと日本語が表示されなくなります

その場合は、japanize_matplotlib.japanize()
を実行するなどで日本語に戻すことができます
使い方(matplotlib/seaborn)
matplotlib①
pyplotで使う方法です。このjapanize_matplotlib
がインストールされていれば、title
, xlabel
, ylabel
などに日本語を設定するだけで日本語が表示できます。
import matplotlib.pyplot as plt
import japanize_matplotlib
import random
x = [i for i in range(100)]
y = [i + random.randint(-10, 10) for i in range(100)]
plt.plot(x, y, label="sample")
plt.title("グラフ")
plt.xlabel("x軸")
plt.ylabel("y軸")
plt.legend()
plt.show()

matplotlib②
subplot
で日本語を使う例です。こちらの場合は、set_title
, set_xlabel
, set_ylabel
に日本語を設定することで日本語を表示できます。
import matplotlib.pyplot as plt
import japanize_matplotlib
import random
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
for i in range(2):
x = [i for i in range(100)]
y = [i + random.randint(-10, 10) for i in range(100)]
ax.plot(x, y, label=f"sample{i}")
ax.set_title("グラフ")
ax.set_ylabel("y軸")
ax.set_xlabel("x軸")
ax.legend()
plt.show()

seaborn
seabornも、日本語を普通に使えるようになります。
import seaborn as sns
import random
import numpy as np
import pandas as pd
import japanize_matplotlib
x = np.arange(0, 100)
y = np.random.randint(0, 100, 100)
df = pd.DataFrame({'軸1': x, '軸2': y})
sns.scatterplot(x='軸1', y='軸2', data=df)

seaborn objects
seaborn objectの場合は、japanize_matplotlibをインポートしても自動で日本語になりません。seaborn objectの場合は、japanize_matplotlibをインポートした後で、フォントにIPAexGothic
を設定することで日本語表示することが可能です。

以下は、seaborn.objectsで日本語を表示するサンプルです。
日本語の指定は、.theme({'font.family': 'IPAexGothic'})
の部分です。
import seaborn as sns
import numpy as np
import pandas as pd
import seaborn.objects as so
import japanize_matplotlib
x = np.arange(0, 100)
x = np.concatenate([x,x])
y = np.random.randint(0, 100, 200)
z = ['A' for _ in range(100)] + ['B' for _ in range(100)]
df = pd.DataFrame({'サンプル1': x, 'サンプル2': y, '結果' : z})
so.Plot(df, x='サンプル1', y = 'サンプル2').add(so.Dot()).theme({'font.family': 'IPAexGothic'})

まとめ
matplotlib, seaborn, seaborn objectsでグラフに日本語を表示する方法について解説しました。japanize_matplitlibのコードを読むと、フォント設定をしているだけですが、インポートだけで設定してくれるのはかなり楽です。