74
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

matplotlibの日本語文字化けを解決する

Last updated at Posted at 2018-11-19

matplotlib の日本語の文字化け(豆腐)問題解決方法

matplotlib を使っていて日本語の文字化け(豆腐)の解決に苦労したので手順をメモ。

環境

Python 3.7.1
macOS Mojave 10.14.1

日本語の文字化け(豆腐)問題

下のグラフのX軸とグラフタイトルが文字化け(豆腐:◻︎◻︎◻︎◻︎)になっています。
この問題を解決したい。

スクリーンショット 2018-11-19 22.24.52.png

matplotlibの設定ファイルの場所を探す

import matplotlib
matplotlib.matplotlib_fname()

僕の環境では以下っぽい。
******/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

日本語フォントをダウンロード

IPAexフォントをダウンロード。

ダウンロードして解凍するとipaexg.ttfというファイルがあるはず。
それを、さっき調べたmatplotlibの設定ファイルが置いてあるフォルダ内のfonts/ttf/フォルダにコピーする。

フォントキャッシュの削除

matplotlibはフォントキャッシュを持っていて、それを削除しないと設定が再読み込みされないらしい。

# フォントキャッシュの場所を探す
import matplotlib as mpl
mpl.get_configdir()

僕の環境では以下っぽい。
/Users/<ユーザー名>/.matplotlib

とりあえず存在しているファイルを削除してみる。

# ファイルとフォルダ
$ rm fontlist-v300.json
$ rm -r tex.cache

そしてpythonにてIPAPGothicを指定して再度グラフ表示。

# フォントを指定
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = 'IPAPGothic'

結果

豆腐のまま。。。。

解決

いろいろ四苦八苦していたら、
fontlist-v300.json の中身を見ると以下の記述。

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

フォント名がIPAexGothicだと気がつく。
ネット情報に頼り意味もわからずコピペ(IPAPGothicを指定)していたことが原因。

# フォントを指定
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = 'IPAexGothic'

やっと日本語が表示されるようになりました。

スクリーンショット 2018-11-19 23.08.10.png

おしまい

74
63
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
63

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?