目次
Linux上でグラフ画像を作成する
利用シチュエーション
- 電気使用量や気温などをグラフ化したものを、WEBコンテンツとして掲載したい場合。
- グラフ化する為の元データは、サーバーより日々自動収集されている
- グラフ作成頻度が日々更新など、手動更新は現実的ではない
構築環境
OS: Rocky Linux 8.9
(Minumumインストール)
※ Xwindowsは導入していない
グラフ作成ツール
コマンドラインで作成できるアプリとして
Gnuplotやmathplotlib があるらしい。他にも探せばあると思うが、
今回は、グラフの種類が多く見た目的に良さそうなmathplotlib を使ってみてる
mathplotlib のインストール
python3/pip
# dnf install python38.x86_64 python38-pip.noarch
mathplotlib
# pip3 install numpy matplotlib
GUI操作の作成ではなくコマンドライン。
つまり、ガリガリとpythonで書いていくので、設定→グラフ作成→見た目チェックの繰り返しとなる
検証機上にも、apacheなどのWEBサーバーをインストして、生成した画像をブラウザ経由で見たほうが早い
グラフ作成 簡易確認
$ vi 1.py
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt plt.plot([1,3,7]) plt.plot([2,2,6]) plt.savefig(“test.png”, format=“png”)
$ python3 ./1.py
グラフで日本語(凡例や単位・タイトルなど)を使いたい
グラフタイトルに日本語を使ってみます。
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt plt.plot([1,3,7]) plt.plot([2,2,6]) plt.title(“てすと環境”) plt.savefig(“test.png”, format=“png”)
$ python3 ./1.py
./1.py:8: UserWarning: Glyph 12390 (\N{HIRAGANA LETTER TE}) missing from current font. plt.savefig("test.png", format="png") ./1.py:8: UserWarning: Glyph 12377 (\N{HIRAGANA LETTER SU}) missing from current font. plt.savefig("test.png", format="png") ./1.py:8: UserWarning: Glyph 12392 (\N{HIRAGANA LETTER TO}) missing from current font. plt.savefig("test.png", format="png") ./1.py:8: UserWarning: Glyph 29872 (\N{CJK UNIFIED IDEOGRAPH-74B0}) missing from current font. plt.savefig("test.png", format="png") ./1.py:8: UserWarning: Glyph 22659 (\N{CJK UNIFIED IDEOGRAPH-5883}) missing from current font. plt.savefig("test.png", format="png")
ワーニングメッセージが表示され、画像ファイルは作成されません。
日本語フォントをインストールする
# dnf install google-noto-sans-cjk-ttc-fonts.noarch google-noto-serif-cjk-ttc-fonts.noarch google-noto-cjk-fonts-common.noarch
# dnf install fontconfig.x86_64
# fc-cache -fv
$ python3 ./1.py
しかし、上記と同じワーニングメッセージで画像ファイルが表示されない
手法を変えて、明示的にフォントを指定してみる
import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties fp12 = FontProperties(fname=r'/usr/share/fonts/google-noto-cjk/NotoSansCJK-Regular.ttc', size=12) plt.plot([1,3,7]) plt.plot([2,2,6]) plt.title(“てすと環境”, fontproperties=fp12) plt.savefig(“test.png”, format=“png”)