Gnuplot :(高血压数据点):根据时间绘制两个点,它们之间的差异

时间:2012-10-05 08:33:30

标签: visualization gnuplot

我新近患有高血压并且需要a)现在定期检查我的bp并记录它并且b)吃药。你无法帮助我b),但我需要你的帮助a)。

我需要记录我的血压,因此我需要每天读几个读数。我的日志看起来像这样:

20121001 0801 175 101
20121001 0802 Pill
20121001 1017 125 91
20121001 1537 121 101
20121001 1907 117 89
20121002 0758 191 111
20121002 0759 Pill
20121002 1003 117 98
(...)

你能帮我找一个读取上述两个数据点的gnuplot配置文件,并根据时间(%Y%m%d %H%M)绘制它们。

这里需要注意的是“... Pill”这些线条,我想将它作为一个点,一条垂直线或类似的东西出现在情节上(它们只是在我服用我的药丸时显示)。 / p>

另外,我不太确定这是否可行,我想想象一下datapoint 1和datapoint 2之间的区别,即。第一行175-101=74

这将极大地帮助我可视化我的药丸是否(以及如果是,何时)开始工作。

谢谢!

2 个答案:

答案 0 :(得分:1)

我创建了以下bash脚本。以日志文件名作为参数运行它:

#! /bin/bash -e
input=$1
start=$(head -n1 "$input")
start=${start:0:9}0000
end=$(tail -n1 "$input")
end=${end:0:9}2359

gnuplot <<EOF
set terminal png
set output 'bp.png'
set xdata time
set timefmt '%Y%m%d %H%M'
set xrange ['$start':'$end']
plot '< grep -v Pill "$input"' using 1:(\$3-\$4):3:4 with errorbars pt 2 title 'Pressure', \
     '< grep    Pill "$input"' using 1:(100) with points lw 2 pt 7 title 'Pill'
EOF
(($?)) && exit 1
display bp.png

答案 1 :(得分:0)

我将回答你问题的第二部分。为此,我更新了您的文件,以便记录。

 1  20121001 0801 175 101
 2  20121001 0802 Pill
 3  20121001 1017 125 91
 4  20121001 1537 121 101
 5  20121001 1907 117 89
 6  20121002 0758 191 111
 7  20121002 0759 Pill
 8  20121002 1003 117 98

gnuplot脚本看起来像这样

plot "< grep -v Pill meas2" using 1:($4-$5) with line, \
     "< grep Pill meas2" using 1:($2*0) ps 10 pt 8

选择不包含Pill的输入行。您可以使用$4-$5执行计算。另一个图在水平轴上绘制符号,表示药丸在线上的时间。

对于第一部分,我发现了一些提示:http://t16web.lanl.gov/Kawano/gnuplot/datetime-e.html