TSL2561で取得したルクスを記録したCSVを読み込んでそれをグラフに描画するまでのメモ
使用するパッケージ
- pandas : データ解析支援ライブラリ
- NumPy : 数値計算ライブラリ
- matplotlib : NumPyを基盤にしたグラフ描画ライブラリ
1 | $ cat packages.txt |
必要な物を入れる
python-tk
が必要(ヘッドレス環境の人は要らないかも)
$ sudo apt-get install -y python-tk
デフォルトの描画エンジンを書き換える
この作業は、ディスプレイがある環境の人は要らないかも
なんでもmatplotlibはデフォルトのエンジンがTkAgg
に設定されていて、ヘッドレス環境でたとえ描画処理を行っていなくても(=ファイル出力のみでも)、以下のエラーが出ました
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1813, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
一時的にXvfbに描画してたんですが、これのために仮想フレームバッファ用意するのもなんかなーという感じだったので、根本的に解決する方法を調べました
pythonでmatplotlibインポート時に、デフォルトのエンジンをTkAgg
から、Agg
に切り替えて上げればよいみたいです
import matplotlib as plt
plt.use('Agg')
CSVを用意する
$ cat datetime.csv
datetime, lux
"15:55", 3269
"16:00", 3358
"16:05", 1689
"16:10", 1123
"16:15", 2535
描画する
plt.use('Agg')
の行は、各自の環境に合わせて置き換えて下さい(ディスプレイがある=TkAggの人は行自体不要)
$ cat test.py
import pandas as pd
import matplotlib as plt
plt.use('Agg')
df = pd.read_csv('datetime.csv')
# df.index = pd.to_datetime(df.index)
df.plot(x='datetime')
# plt.pyplot.show()
plt.pyplot.savefig("datetime.png")
描画したらこのようになりました