Matplotlibでの文字化けの対処法には日本語化の設定をしよう!

不具合対処への奮闘
スポンサーリンク

jupyter notebookのPythonでMatplotlibのグラフの描画をしている時、日本語でラベルを設定した時に文字化けして困っている人は多いでしょう。

実はMatplotlibはデフォルトでは日本語表記に対応していません。

ここではAnacondaを使っていることを前提として、Matplotlibを日本語化する方法をみていきましょう。(ここではMacの方法について説明しています。ライブラリのバージョンアップで起こるエラーへの対応も追記しました)

では、Matplotlibを日本語化する方法を順に見ていきましょう。

スポンサーリンク

無料フォント(IPAexGotic)をダウンロードする

Matplotlibを日本語化するには、まず、対応した日本語のフォントを入手します。どうもMacのデフォルトのフォントでは上手く対応していないようです。こちらのサイトからフォントを入手します。

https://ipafont.ipa.go.jp/

ダウンロードサイトに移動します。

遷移したページをスクロールして、該当箇所からフォントをダウンロードします。

ここではIPAexゴシック(Ver.003.01の数字は異なる場合があります)をダウンロードします。

スポンサーリンク

フォントファイルをMatplotlibにインストール

ダウンロードしたファイルを解凍して、フォルダの中にあるipaexg.ttf というフォントファルを、Matplotlibのフォントフォルダttfの中に入れます。

フォントフォルダの位置は、macの場合は次のようになります。

/Users/(あなたのMacのHome名)/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf

※ macOS Catalinaに最新バージョンのAnacondaをインストールした場合、/Users/(あなたのMacのHome名)/opt/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf となっていると思います。以降の説明も適時読み替えてください。

スポンサーリンク

matplotlibrcファイルを書き換える

次は、matplotlibrcファイルを書き換えます。このファイルは、fontsフォルダと同じ階層にあります。

Macでの位置は次の場所になります。

/Users/(あなたのMacのHome名)/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/

この中にmatplotlibrcファイルがあります。

テキストエディタなどでこのファイルを開いて、「#font.family」が記述されている場所を探します。[command]+[F]で検索をかけると1ヶ所ヒットするはずです。

#font.family : sans-serif という場所がヒットしていると思います。

この文字列をコピーして次の行にでも貼り付け、それを次のように書き換えます。

font.family : IPAexGothic

先頭の#を削除していることに注意してください。

書き換えたらファイルを保存します。

以上で、matplotlibの日本語化の設定は完了です。(ただし、バージョンが古い場合)

しかし、matplotlibバージョンが進むと、このままではAnacondaではエラーになるようです。以下の追記で対処法を示しておきます。

スポンサーリンク

(追記)matplotlibのバージョンアップによるエラーへの対処法

これまでは、以上の対応で良かったのですが、matplotlibのバージョンアップによって上記の方法だけでは日本語化への対応ができず、次のようにエラーが表示されたりします。(私の場合はmacOSがアップデートしたタイミングで、Anacondaを再インストールして環境を構築し直したことでエラーが発生しました)

(これを表示するコードは最後に記載しています。)

表示が小さいですが、グラフの縦軸の表示のy軸の軸の字が文字化けしたままです。

そこで、これに対処するために、上記の方法に続けて以下のことを行います。

Anacondaが起動していないことを確認して、[command] + [shift] + [.(ドット)] キーを押して隠しファイルを表示させます。

Macの隠しファイルを表示させる方法(表示/非表示の切り替え)
Macで操作をしている時サーバーの設定などで.htaccessファルなどの隠しファイルを操作することがあります。ただしMacはそのままではこの隠しファイルが表示されていません。ここではMacの隠しファイルを表示させる方法を扱います。

そして次の位置にある隠しフォルダの中のファイルを探します。

Macの/Users/(あなたのMacのHome名)/.matplotlibフォルダに進みfontlist-v310.jsonというファイルがあるのを確認します。(バージョンによっては数字などは異なるかもしれません)

このJSONファイルを開くと冒頭は次のように記載されています。

{
  "_version": 310,
  "_FontManager__default_weight": "normal",
  "default_size": null,
  "defaultFamily": {
    "ttf": "DejaVu Sans",
    "afm": "Helvetica"
  },
  "ttflist": [
    {
      "fname": "fonts/ttf/cmb10.ttf",
      "name": "cmb10",
      "style": "normal",
      "variant": "normal",
      "weight": 400,
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    },......(以下略)

このファイルを見ると、”ttflist”: [……]とい形で対応しているリストの中に、たくさんのフォントのデータがjson形式で記載されているのがわかります。

そのリストの中に、以下のように記載したIPAexGothicのフォントデータを追記します。

   {
      "fname": "fonts/ttf/ipaexg.ttf",
      "name": "IPAexGothic",
      "style": "normal",
      "variant": "normal",
      "weight": "regular",
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    },

他のリストと見比べたらわかりますが、fnameのところをフォントファイルをインストールした位置に書き換え、nameをIPAexGothicと指定しているだけです。weightはregularにしました。

このコードを”ttflist”: [……]の先頭に書き込むと次のようになります。

{
  "_version": 310,
  "_FontManager__default_weight": "normal",
  "default_size": null,
  "defaultFamily": {
    "ttf": "DejaVu Sans",
    "afm": "Helvetica"
  },
  "ttflist": [
   {
      "fname": "fonts/ttf/ipaexg.ttf",
      "name": "IPAexGothic",
      "style": "normal",
      "variant": "normal",
      "weight": "regular",
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    },
    {
      "fname": "fonts/ttf/cmb10.ttf",
      "name": "cmb10",
      "style": "normal",
      "variant": "normal",
      "weight": 400,
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    },......(以下略)

辞書型データ{}の追記なので、最後のカンマ(,)を入れ忘れないようにしてください。

追記が終わったら、ファイルを保存します。(隠しファイルも非表示にしておきましょう)

以上で、matplotlibの日本語化の設定のエラー対応は完了です。次に記載したコードで表示を試してみましょう。

スポンサーリンク

最後に

以上で、jupyter notebookを使っている時に、Matplotlibのグラフの描画で日本語表記が文字化け(四角い表示なので豆腐と言ったりします)する現象は解消されるはずです。

jupyter notebookで、試しにコードを書いてみます。

import matplotlib.pyplot as plt
import numpy as np

plt.plot([1, 2, 3, 4, 5])
plt.ylabel('y軸')
plt.show()

ラベルに’y軸’と漢字を使っています。

ちょっと小さくて見えにくいですが、漢字で表示されているのがわかります。対処していないとここが□のような表示になっているはずです。

他にも対処法はあるようですが、とりあえずはこの方法でいいのではないでしょうか。

タイトルとURLをコピーしました