見出し画像

Pythonista3 の Matplotlib グラフで日本語を表示する。

matplotlibでは、デフォルトでグラフタイトルや軸ラベル等に日本語を表示させることはできません。(文字化けします。)原因は、デフォルトで指定されているフォントが日本語を表示できないからです。

matplotlib で指定されているフォントの確認方法は以下のとおりです。インタラクティブコンソールで結果を出力させてみます。

import matplotlib as plt
print(plt.rcParams[“font.family”])

画像1

結果、[‘IPAexGothic’] と出力されました。IPAゴシックフォントは、誰でも無償で利用できる高品位な日本語フォント、、、なので日本語は使えるはずなのですが、、、

IPAフォントとは?
コンピュータで文字を扱うには、文字の形をデータ化してまとめたフォントが必要です。IPA(情報処理推進機構)では、システムの種類を問わず無償で利用できる高品位なフォント「IPA フォント」や、その改良版の「IPAex フォント」を開発・公開してきました。
これらのフォントは、文字符号に関する国際標準規格「ISO/IEC 10646」に準拠した符号化により、異なるシステムやコンピュータでも問題なく文字を表示できます。
出展 : https://www.ipa.go.jp/osc/ipafont

色々と調べてみましたが、matplotlib >> mpl-data >> fonts に IPAフォント(ipaexg.ttf)がインストールされていないから???

matplotlibの設定ファイル matplotlibrc の記述内容を調べてみると、font.family には sans-serif が指定されています。(うーーーん、よく分かりません。。。)

matplotlibrc は、デフォルトのグラフスタイル(線やグリッドの種類・太さ・色など)を規定する設定ファイルのことです。常に適用したい設定内容は matplotlibrc に記述するとデフォルトとなります。

▼ matplotlibrc の場所
Python Modules >> Standard Library (3.6) >> site-packages >> matplotlib >> mpl-data >> matplotlibrc

画像2

深追いしても仕方ないので・・・本題に行きましょう。
matplotlib で日本語を表示できるようにするにはいくつかの方法があるようです。

(1) 日本語対応モジュールをインポートする方法

pip で日本語対応モジュール japanize-matplotlib をインストールして、スクリプト内でインポートするだけで簡単に日本語表示が可能となります。

(1) pip で日本語対応モジュールをインストールする。
インタラクティブコンソールから次のコマンドを入力します。

pip install japanize-matplotlib

画像3

(2) スクリプト内で日本語対応モジュールをインポートする。
他のライブラリやモジュールと同様に、事前に読み込んでおけば日本語に対応した状態となります。

import japanize_matplotlib

たったこれだけの2ステップで matplotlib での日本語が使えるようになることに驚きました。

モジュール内に含まれる “IPAexゴシックフォント”を matplotlibrc に設定することで日本語化を可能としています。従って、使用できるフォントは IPAexゴシックフォントに固定となります。

画像4

(2) 日本語フォントをインストールする方法

matplotlib のフォントが iPad のフォントと連動していないので、日本語フォントは別途インストールする必要があります。無料で配布されている Unicode対応の IPAゴシックフォントをインストールして使えるようにします。

http://ipafont.ipa.go.jp/node26

IPAフォントのサイトから IPAexfont00301.zip をダウンロードして解凍し、IPAゴシックフォント(ipaexg.ttf)を iPad上に保存します。(私は Macbook Proから iCloud経由で iPad に転送しました。)

そして、IPAゴシックフォント(ipaexg.ttf)を Pythonista3 の site-packages フォルダにコピーします。

画像5

画像6

日本語を表示する場合は、FontPropertiesライブラリをインポートし、表示するアイテムごとに fontproperties = fp を引数にセットする必要があります。引数 fname でフォントファイル名を読み込み専用モード(” r ”)で参照します。

from matplotlib.font_manager import FontProperties
fp = FontProperties(fname = ''r'' + フォントファイル名)

IPAゴシックフォント(ipaexg.ttf)を Pythonista3 の site-packagesフォルダに保存したので、引数 fname にはフルパスで参照させる必要があります。
( site-packagesフォルダにはパスが通っているという情報が Web上にありましたが、実際はフルパスで参照しないとフォントが反映されませんでした。)

site-packages フォルダのフルパスは、直下に以下のスクリプトを記述し、osライブラリの getcwd( ) メソッドによりカレントディレクトリを参照して取得しました。

import os
print(os.getcwd())

▼ site-packages フォルダの絶対パス
/private/var/mobile/Containers/Shared/AppGroup/~~~~~ 固 有 I D ~~~~~/Pythonista3/Documents/site-packages

site-packages に保存した IPAフォントを参照することによって日本語表示に対応するサンプルコードです。 

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

file_name = '/private/var/mobile/Containers/Shared/AppGroup\
/ ~ ~ ~ ~ ~ 固 有 I D ~ ~ ~ ~ ~ /Pythonista3/Documents\
/site-packages/ipaexg.ttf'

fp = FontProperties(fname = ''r'' + file_name)

# figure,axesインスタンスを生成
fig = plt.figure(figsize=(4.8,3.6),dpi=100)
ax = fig.add_axes((.15,.15,.7,.7))
ax.set_title('ポイント&フィギュアチャート', fontproperties=fp)

# 軸目盛りを非表示(左, 下)
ax.tick_params(labelbottom=False,
              labelleft=False,)
# 軸ラベルを設定
ax.set_xlabel('時間軸', fontproperties=fp)
ax.set_ylabel('為替レート', fontproperties=fp)

plt.show()

画像7

ちなみに、Scriptファイルを作成したフォルダー直下にIPAフォントファイルを保存すれば ForntProperties の 引数 fname には ipaexg.ttf とだけファイル名を指定するだけで日本語を使用できます。

fp = FontProperties(fname=r’ipaexg.ttf’)

日本語対応フォントをインストールする方法であれば、日本語フォントを複数インストールすることでフォントを選択することができるようになります。

(3) Pythonista3 における対応方法の選択

Pythonista3 では、matplotlibの設定ファイル である matplotlibrc の内容を編集することが許可されていないため、matplotlibrcを直接編集することにより恒久的に日本語フォントを使用できるように設定することができません。従って、現状では上記2つの方法から環境や目的に応じて対応方法を選択することになります。

画像8


この記事が気に入ったらサポートをしてみませんか?