VS Code + matplotlib で日本語のグラフを表示する
前回「VS Code で Jupyter を動かしてみる」をやってみましたがグラフ表示の matplotlib での日本語表示がうまくいきませんでした。
いろいろ調べて出来るようになったので記録しておきます。
方法は1つだけではなさそうですが、これでいくことにしました。
1. 環境
OS:Windows 10
VS Code:1.43.2
拡張機能:Anaconda Extension Pack 1.0.1
Pythonインタープリター:3.7.3 64-bit
2. ビフォー
import matplotlib.pyplot as plt
flg, ax = plt.subplots()
x = [1, 2, 3, 4, 5]
y = [3, 6, 4, 8, 5]
labels = ['バナナ', 'パイナップル', 'みかん', 'いちご', 'メロン']
ax.bar(x, y, tick_label=labels, label='好きなフルーツ')
ax.legend()
plt.show()
上のソースを実行したところ、日本語表示したいところが長四角の豆腐になってしまいます。
Jupyter notebook で試してみても状況は同じです。
3. 対応
3-1.フォントファイルの取得
OSにあらかじめインストールされているフォントを使用してもいいのですが、Linuxなどの環境でも同じフォントを使用したいのでIPAexゴシックを使用することにしました。
https://ipafont.ipa.go.jp/ からダウンロードします。
これを解凍してフォントファイル(拡張子 tff)を取得します。
ipaexg.tff は IPAexゴシック
ipaexm.tff は IPAex明朝
です。
3-2.フォントファイルの配置
matplotlibの設定ファイルを探します。
import matplotlib as mpl
print(mpl.matplotlib_fname())
私の環境の場合はここにありました。
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc
上記からの相対パスとしての
../fonts/ttf
すなわち
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\fonts/ttf
にフォントファイル ipaexg.ttf を配置します。
3-3.matplotlib側での設定
C:\Users\<username>\.matplotlib\fontlist-v300.json
を削除します。
キャッシュファイルがあればそれも削除します。
ここでいったん VS Code を再起動しておきます。
4.アフター
最初のソースにフォントを明示的に指定するために
plt.rcParams['font.family'] = 'IPAexGothic'
を挿入します。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'IPAexGothic'
flg, ax = plt.subplots()
x = [1, 2, 3, 4, 5]
y = [3, 6, 4, 8, 5]
labels = ['バナナ', 'パイナップル', 'みかん', 'いちご', 'メロン']
ax.bar(x, y, tick_label=labels, label='好きなフルーツ')
ax.legend()
plt.show()
Jupyter notebook でも試してみます。大丈夫でした。
5.このあとやりたいこと
scikit-learn を用いて分析したデータをグラフにしてみたい。
6.参考にさせていただいたQiitaの先輩
@Kanatani28 さん https://qiita.com/maroKanatani/items/3b080c639395bba7795a
@yniji さん https://qiita.com/yniji/items/3fac25c2ffa316990d0c
Author And Source
この問題について(VS Code + matplotlib で日本語のグラフを表示する), 我々は、より多くの情報をここで見つけました https://qiita.com/azumabashi/items/7e4f73442afec37d1ca6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .