2019年2月9日土曜日

matplotlibで日本語フォントを使う

maptlotlibでは、標準のままではタイトルや軸に日本語フォントを使うと文字化けします(豆腐フォント化)。フォントを用意して日本語も出力できるようにします。

ttfフォントファイルを用意する

この例では、IPAが提供しているフォントをダウンロードします。
https://ipafont.ipa.go.jp/old/ipafont/download.html
IPAゴシック、IPAPゴシック、IPA明朝、IPAM明朝の4種類のフォントのttfファイルが入ったzipファイルがあります。

(Win、Ubuntu同様)
使いたいフォントのttfファイルをmatplotlibのfontディレクトリに入れます。
例えば以下のディレクトリです。
 anaconda\...\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

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

フォントのキャッシュを削除します。このディレクトリを.matplotlibごと削除します。

Win
(User)\.matplotlib

Ubuntu
(User)/.cache/matplotlib/

他のサイトで紹介されている「fontList.py3k.cacheを消す方法」だけではうまく行きませんでした。matplotlib.pyplotを再度インポートすると.matplotlibが作成されるのが確認できます。Winでは(というかversion3以降では)fontlist-v300.jsonというファイルもできます。

日本語フォントで描画

Pゴシックを使ってタイトル部分を「タイトル」にします。
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'IPAPGothic'
plt.plot([1,2])
plt.title("タイトル")
plt.show()


ちなみに、フォントをデフォルトのsans-serif(サンセリフ)に戻すにはこうします。

plt.rcParams['font.family'] = 'sans-serif'

x, y軸もフォントを変えてみます。
plt.plot([1,2])

plt.title('タイトル:IPA明朝', {'fontname':'IPAMincho'}, fontsize=18)
plt.xlabel('X軸:IPAP明朝', {'fontname':'IPAPMincho'}, fontsize=18)
plt.ylabel('Y軸:IPAPゴシック',{'fontname':'IPAPGothic'}, fontsize=18)
plt.show()



参考

https://github.com/matplotlib/matplotlib/issues/3590
http://kaisk.hatenadiary.com/entry/2015/02/15/215831

0 件のコメント:

コメントを投稿