pythonのグラフ描画ライブラリである「matplotlib」で、日本語を表示しようとすると文字化けしてしまいます。
本記事では、matplotlibで日本語を使用する方法について紹介します。
この記事で分かること
- matplotlibで日本語が文字化けする例
- matplotlibで日本語を使用する方法
- 日本語を表示できるフォントの調べ方
スポンサーリンク
matplotlibで日本語が文字化けする例
matplotlibのグラフに日本語を表示させようとすると、文字化けしてしまい正しく表示できません。
以下、文字化けが発生するサンプルコードです。
### 日本語が文字化けする例
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, label = 'サイン')
ax.set_xlabel('Xラベル', fontsize = 18)
ax.set_ylabel('Yラベル', fontsize = 18)
ax.set_title('タイトル', fontsize = 18)
ax.text(0, -0.8, 'テキスト', fontsize = 14)
ax.legend()
plt.show()
本コードを実行すると、下記のグラフが表示されます。
日本語がことごとく文字化けしています。
ちなみに、この文字化けは "豆腐" と呼ばれているみたいですね。
【補足】matplotlibのデフォルトのフォント
補足的な説明になります。
matplotlibで、日本語が文字化けして表示できない理由は、デフォルトのフォントが日本語対応していないものになっているためです。
以下のサンプルコードでデフォルトのフォントを出力できます。
### matplotlibのデフォルトのフォントの確認方法
import matplotlib
print(matplotlib.rcParams['font.family'])]
"""
['sans-serif']
"""
"sans-serif" というフォントがデフォルトのフォントになっていることが確認できます。
スポンサーリンク
matplotlibで日本語を使用する方法
matplotlibで、日本語に対応したフォントを指定すると、文字化けさせずに日本語を表示できるようになります。
以下、日本語に対応したフォントを指定し、文字化けさせずに表示させるサンプルコードです。
### matplotlibで日本語を表示
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, np.pi * 4, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, label = 'サイン')
ax.set_xlabel('Xラベル', fontsize = 18, fontname = 'MS Gothic')
ax.set_ylabel('Yラベル', fontsize = 18, fontname = 'MS Gothic')
ax.set_title('タイトル', fontsize = 18, fontname = 'MS Gothic')
ax.text(0, -0.8, 'テキスト', fontsize = 14, fontname = 'MS Gothic')
ax.legend(prop = {'family' : 'MS Gothic'})
plt.show()
本コードを実行すると、下記のグラフが表示されます。
日本語が文字化けせずに表示できています。
matplotlibで日本語を表示できるフォントの調べ方
日本語に対応したフォントの確認方法を紹介します。
フォント情報が記載されたファイル
matplotlibのフォント情報は、下記のファイルに記載されています。
C:/User/ ---ユーザー名--- /.matplotlib/fontlist-v330.json
ファイルの中のname部分が、フォント名に対応しています。
ただ、このファイルをみただけでは、日本語に対応したフォントなのかは分かりません。
日本語対応したフォントの確認方法
日本語に対応したフォントについては、下記のリストで確認できます。
"日本語" という文字列が、文字化けせずに正しく表示されているフォントが、日本語に対応したフォントになります。
上記のフォントリストを出力できるコードについては、長くなるためこの記事での説明は割愛します。
下記の記事で詳しく紹介しているので、興味のある方は併せて参考にしてみてください。
また、各要素ごとにfontnameを指定するのが面倒な場合は、rcParamsの設定値を変更することでプログラム全体のグラフのフォントを一括で変更することもできます。
rcParamsについては、下記の記事で紹介しています。
スポンサーリンク