GMT ver.5 で体重グラフ


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

f:id:S_E_Hyphen:20180409140131j:plain