はじめに
2007年にべつやくれい氏が「円グラフで表そう」で公開した、円グラフで気持ちを表現するべつやくメソッドについて、10年以上を経てこれをそのままやってくれるサービスが見当たらなくなりました。フォントは後付けもあるとして、手書き風の円グラフ、それも現代的にSVGで探したところ、matplotlibでできることがわかりました。本ページはその備忘録的なページです。なお、主な参考ページは後ろにまとめて記載しておきます。また、全てMacで作業しています。
2007年にべつやくれい氏が「円グラフで表そう」で公開した、円グラフで気持ちを表現するべつやくメソッドについて、10年以上を経てこれをそのままやってくれるサービスが見当たらなくなりました。フォントは後付けもあるとして、手書き風の円グラフ、それも現代的にSVGで探したところ、matplotlibでできることがわかりました。本ページはその備忘録的なページです。なお、主な参考ページは後ろにまとめて記載しておきます。また、全てMacで作業しています。
Macでプリインストールされているフォントではまともに日本語が表示できない。AppleGothicを推奨しているWebサイトもあるが、「気」など常用漢字の範囲すら表示できないので非実用的だ。そこで表示可能な「IPAフォント」を独立行政法人情報処理推進機構のWebサイトからインストールする。この他にも「衡山毛筆フォント行書」「Noto Serif」なども使える。
なお、先にフォントをインストールしている方がトラブルは起きにくい様子。
brew update、brew upgradeを実行し、Homebrewを最新にする。brew install python3
pip3 install --upgrade setuptools
pip3 install --upgrade pip
brew install freetype
pip3 install matplotlib
下記で使えるフォント一覧が出るので、最初にインストールしたフォントが使えるか確認する。
python3
>>> import matplotlib.font_manager as fm
>>> fm.findSystemFonts()
表示されない場合は、下記でキャッシュを削除する。(ここは色々な方法があるようです。)
matplotlib.font_manager._rebuild()
上記の準備ができたら、ようやくmatplotlibでグラフの描画スクリプトを書ける。今回はべつやくメソッドで円グラフなので、下記は基本は円グラフのスクリプトとなる。なお、普通の円グラフと手書き風円グラフの切替、単純に表示させる場合とファイル出力の切替をできるようにした。なお、出力される手書き風円グラフはPath要素で構成されファイルサイズが大きいことから、最終的にはSVGZにする必要があるかもしれない。
import matplotlib.pyplot as plt
print('手書き風にしますか? [y/n]')
str1 = input()
if str1 == 'y':
plt.xkcd()
else:
pass
font = {'family': 'IPAexGothic'}
plt.rc('font', **font)
data = [45, 15, 15, 20, 5]
labels = ['ねずみ', 'うし', 'とら', 'うさぎ', 'たつ']
colors = ['yellowgreen', 'gold', 'red', 'lightskyblue', 'lightcoral']
plt.figure(figsize=(7, 6))
plt.pie(data, labels=labels, colors=colors, autopct='%1.1f%%', startangle=270)
plt.axis('equal')
print('SVGで保存しますか? [y/n]')
str2 = input()
if str2 == 'y':
plt.savefig('piechart.svg')
elif str2 == 'n':
plt.show()
else:
print('処理を中止しました。')
ラベルの折り返し等に不満があったのでSVGを再編集することにした。SVGと言えばinkscapeが有名だが、簡易な用途には重いのでLibreOfficeでtext要素の文字記入のみ行ったところお手軽だった。
ただしテキストエディタで確認したところ、Versionは1.1が最新なのに1.2になっていた。また、無駄なタグ、要素及びclass属性が多く自動の圧縮ソフト等でも削除されないので、手作業が必要だった。