mysql> desc body_weight;
+--------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------+------+-----+---------+-------+
| 測定日 | date | YES | | NULL | |
| 体重 | float | YES | | NULL | |
| 摂取カロリー | float | YES | | NULL | |
| 収支カロリー | float | YES | | NULL | |
| 運動目標 | tinyint(1) | YES | | NULL | |
| 食事目標 | tinyint(1) | YES | | NULL | |
+--------------------+------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
上にようなテーブルを用意し、日々の体重や摂取カロリーを記入しておきます。このような、ごく単純なデータベースをGMTを使ってグラフ化してみます。
体重を折れ線グラフで、カロリーを柱状グラフで描画しています。縦軸を左右2軸としたところが新知見です。
#!/bin/bash
gmt gmtset FONT_ANNOT_PRIMARY 10p,GothicBBB-Medium-UniJIS-UTF8-H
gmt gmtset FONT_ANNOT_SECONDARY 16p,GothicBBB-Medium-UniJIS-UTF8-H
gmt gmtset FORMAT_DATE_MAP="yyyy o"
host="-h 127.0.0.1"
pdffile="./体重-カロリー.pdf"
temp=`mktemp ./XXXX.tmp`
psfile=`mktemp ./XXXX.ps`
for (( month=5; month>=2; month-- ))
do
case $month in
5) date1="2018-5-1";date2="2018-6-1"; flg="-P -K";;
4) date1="2018-4-1";date2="2018-5-1"; flg="-O -K -Y7c";;
3) date1="2018-3-1";date2="2018-4-1"; flg="-O -K -Y7c";;
2) date1="2018-2-1";date2="2018-3-1"; flg="-O -K -Y7c";;
esac
gmt psbasemap -JX15c/5c -R"$date1"T/"$date2"T/1000/4000 \
-BS -Bpxa1df1D -Bsxa1O $flg >> $psfile
mysql -N life_log $host << _SQL_ > $temp
select date_format(測定日,'%Y-%m-%dT12:00:00'),摂取カロリー from body_weight
where "$date1"<=測定日 and 測定日<"$date2" order by 測定日;
_SQL_
gmt psxy -J -R -BnSEw -By500+l'kcal' -Sb0.5 -W1p -Gwhite -O -K $temp >> $psfile
mysql -N life_log $host << _SQL_ > $temp
select date_format(測定日,'%Y-%m-%dT12:00:00'),収支カロリー from body_weight
where "$date1"<=測定日 and 測定日<"$date2" order by 測定日;
_SQL_
gmt psxy -JX15c/5c -R"$date1"T/"$date2"T/1000/4000 \
-BnSEw -By500+l'kcal' -Sb0.5 -W1p -G#AAAAAA $temp -O -K >> $psfile
mysql -N life_log $host << _SQL_ > $temp
select date_format(測定日,'%Y-%m-%dT06:00:00'),体重 from body_weight
where "$date1" - interval 1 day<=測定日 and
測定日<"$date2" + interval 1 day order by 測定日;
_SQL_
gmt psxy -JX15c/5c -R"$date1"T/"$date2"T/64.5/70.5 \
-BnSeW -By1g1+l'kg' -W1p,red $temp -O -K >> $psfile
mysql -N life_log $host << _SQL_ > $temp
select date_format(測定日,'%Y-%m-%dT12:00:00'),65.2 from body_weight
where "$date1"<=測定日 and 測定日<"$date2"
and 運動目標 order by 測定日;
_SQL_
gmt psxy -J -R $temp -Sc0.2c -W1p -Gcyan -O -K >> $psfile
mysql -N life_log $host << _SQL_ > $temp
select date_format(測定日,'%Y-%m-%dT12:00:00'),64.8 from body_weight
where "$date1"<=測定日 and 測定日<"$date2"
and 食事目標 order by 測定日;
_SQL_
gmt psxy -J -R $temp -Sh0.2c -W1p -Gorange -O -K >> $psfile
done
cat << + |\
gmt pslegend -R -J -Dx0.5c/0.5c+w3.5c/3.5c+jBL \
-F+p1p,black+gwhite -O >> $psfile
N 1
S 0.3c - 0.25c 0/0/0 1p,red 0.8c 体重
G 0.3c
S 0.3c s 0.5c white 1p,black 0.8c 摂取カロリー
G 0.3c
S 0.3c s 0.5c #AAAAAA 1p,black 0.8c 収支カロリー
G 0.3c
S 0.3c c 0.2c cyan 1p,black 0.8c 速歩30分達成
G 0.3c
S 0.3c h 0.2c orange 1p,black 0.8c ビール5缶達成
+
ps2pdf $psfile $pdffile
rm $temp $psfile