【japanize-matplotlib】WSL-Ubuntuでmatplotlibの「豆腐」文字化け解消法
WSL:Ubuntuでのmatplotlibを日本語化
グラフ作成ライブラリmatplotlib
のデフォルト設定では、タイトルやラベルなどを日本語で書くといわゆる「豆腐」と言われる文字化けで上手く表記できません。
「豆腐」文字化けを解消する方法として色んなサイトや本で解説されているのは、日本語のfontをダウンロードし設定し云々・・・というものがほとんどです。以前にWindowsにAnacondaを入れていた時もそれで上手く行きました。
しかし、WSLのUbuntuにAnacondaを入れ直して同じことをやってみたのですが、どうも上手く行かない。
今回はライブラリjapanize-matplotlib
をインストールして上手く行った方法をメモしておきます。
【実行環境】
「豆腐」文字化けの例
まずは普通にグラフを表示する。次のように文字化けする。
import matplotlib.pyplot as plt import pandas as pd import numpy as np np.random.seed(0)
# データ(20行2列のランダムなデータ) df = pd.DataFrame(np.random.rand(20,2)) # 背景色を白にする(notebookの背景色を黒に変えている為です) plt.figure(facecolor='w') # 1列目をプロットする plt.plot(df.iloc[:,0], label='1列目') # 2列目をプロットする plt.plot(df.iloc[:,1], label='2列目') # タイトルを日本語で書く plt.title('日本語ラベルテスト') # ラベルを日本語で書く plt.xlabel('日本語Xラベル') plt.ylabel('日本語Yラベル') # 凡例を日本語で設置 plt.legend() # 画像保存 plt.savefig('文字化けグラフ.jpg') plt.show()
/home/user/anaconda3/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 26085 missing from current font.
font.set_text(s, 0.0, flags=flags)
/home/user/anaconda3/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 26412 missing from current font.
(中略)
font.set_text(s, 0.0, flags=LOAD_NO_HINTING)
このように日本語で書いた部分が文字化けする。
japanize-matplotlibで文字化け解消
次はjapanize-matplotlib
というライブラリをインストール・インポートして、上と全く同様のコードを実行してみます。
ライブラリのインストールはconda install
ではできなかったので次のようにしました。
$ python -m pip install japanize-matplotlib
ライブラリ名はjapanize-matplotlib
ですが、importする時はハイフンをアンダーバーに変えてjapanize_matplotlib
とします。
# 日本語化のライブラリをインポート import japanize_matplotlib # データ(20行2列のランダムなデータ) df = pd.DataFrame(np.random.rand(20,2)) # 背景色を白にする(notebookの背景色を黒に変えている為です) plt.figure(facecolor='w') # 1列目をプロットする plt.plot(df.iloc[:,0], label='1列目') # 2列目をプロットする plt.plot(df.iloc[:,1], label='2列目') # タイトルを日本語で書く plt.title('日本語ラベルテスト') # ラベルを日本語で書く plt.xlabel('日本語Xラベル') plt.ylabel('日本語Yラベル') # 凡例を日本語で設置 plt.legend() # 画像保存 plt.savefig('文字化け解消グラフ.jpg') plt.show()
上手く日本語で表示されました!
おわりに
今回の方法では毎回インポートするのが面倒ではあるものの、japanize-matplotlib
をインストールするだけで済み、フォントをダウンロードしたり設定ファイルを書き直したりしなくてよいので最も簡単。WSL以外でもこれが使えます。
以上です。