Lambda上でmatplotlibを使ってグラフを作成したいとき、Lambdaには日本語フォントが含まれていないため日本語が豆腐になってしまいます。この記事では、日本語対応するための方法について説明します。
前提
matplotlibは別途利用できるようにレイヤーなどで用意する必要があります。
やり方
- Lambdaレイヤーに日本語フォント用のレイヤーを登録
- Lambda関数に日本語フォント用のレイヤーを追加
- matplotlibでフォント読み込み
1.Lambdaレイヤーに日本語フォント用のレイヤーを作成
日本語フォントなら基本的に何でもOKと思いますが、今回はIPAexゴシック(ipaexg.ttf)をダウンロードして使いました。
ダウンロードしたttfファイルを適宜ディレクトリ(例えばfontsなど)に入れてzip圧縮します。
Lambdaのレイヤーページから「レイヤーの作成」にて作成画面に移動し、アップロードにて先程圧縮したzipファイルを選択してレイヤーを作成します。
2. Lambda関数に日本語フォント用のレイヤーを追加
グラフを作成するメインLambda関数に、先程作成した日本語フォント用のレイヤーを追加します。
3. matplotlibでフォント読み込み
font_managerのFontPropertiesにてレイヤーで登録したttfファイルを指定すれば日本語が使えるようになります。レイヤーは/opt
にバインドされますので適宜指定してください。
import matplotlib.font_manager as fm
# 日本語フォント設定
prop = fm.FontProperties(fname='/opt/fonts/ipaexg.ttf')
・・・略・・・
ax.set_xticklabels(labels, rotation=45, fontproperties=prop)
その他
- ttfファイル自体をLamba関数に含めることでも実現可能ですが、容量が大きいためWebIDE上でコードの編集ができなくなる可能性があります。
- 他の方法として、japanize-matplotlibのレイヤーを作ってもよいかもしれませんが、試してません。