来自日期和版本的sqlite数据库的数据的gnuplot时间与温度?

时间:2015-01-18 03:32:55

标签: sqlite raspberry-pi gnuplot

我有一个远程数据采集系统将站点温度记录到远程系统上的sqlite3数据库。数据库包含一个'视图'显示最近48小时的运行数据。远程系统定期将数据库视图的结果导出到名为last48.csv的文件中,该文件具有以下数据格式:

"timestamp", "temp"
"2015-01-15 00:00:02", "18.6"
"2015-01-15 00:15:02", "18.4"
"2015-01-15 00:30:02", "18.2"
"2015-01-15 00:45:02", "18.5"
"2015-01-15 01:00:01", "18.3"
"2015-01-15 01:15:02", "18.2"

我想以编程方式使用gnuplot获取last48文件数据并生成一个图形文件,其中包含我48小时数据(x =日期时间与y =温度)的x / y线图,以便包含在已经生成并运行回本地系统的html doc。

这是我目前的尝试,虽然我确信我在几个地方处于交叉目的(因为它主要是在黑暗创作中剪切和粘贴/摸索):

set title '#29 Temperature'
set style line 1 lc rgb '#0060ad' lt 1 lw 2 pt 7 ps 1.5   # --- blue
set xdata time
set timefmt "%Y/%m/%d:%H:%M:%S"
set ylabel '<Deg C>'
set xrange [2015:2015]
set xlabel '<Time>'
set grid
set term png
set format x "%H/%M"
set output 'TempPlot.png'
plot 'last48.csv' using 1:2

我玩过gnuplot,但我没有取得多大成功。我想我被gnuplot提供的所有可能性所震撼。

我们将不胜感激。如果有一种方法可以编写gnuplot来直接查询数据库,那就更好了。

2 个答案:

答案 0 :(得分:2)

您可以在 gnuplot脚本中执行命令调用 (请参阅 gnuplot 中的help shellhelp commands。)

因此,您可以要求系统从类似

的行生成输出文件last48.csv
! sqlite3 -header -csv my_db.db "select * from my_table;" > last48.csv

当然不是select *my_table等等......您将使用您用来生成 csv 文件的命令。

您可能会发现在运行时修复绘图的当前范围(以及可能适用于上述选择规则)非常有用。在Linux下,您可以使用以下行

StartDate="\""."`date --date "2 days ago" +%Y-%m-%d\ %H:%M`"."\""
EndDate="\""."`date +%Y-%m-%d\ %H:%M`"."\"" 
set xrange [StartDate:EndDate]

注意:

  • 如果你有一个&csv&#39;文件生成时间超过48小时,例如16:00的{​​{1}}您可以使用以下命令选择 xrange

    设置xrange [&#39;&#34; 2015-01-10 16:00&#34;&#39;:&#39;&#34; 2015-01-12 16:00&#34;& #39]

  • 如果您在Linux下运行2015-11-12,可以参考gnuplot获取有关如何格式化当前日期的提示
  • man date的最新版本允许使用运算符gnuplot加入不同的字符串。例如。如果A =&#34;我的&#34;,B =&#34;完全&#34;,C =&#34;字符串&#34;那么D = A.B.C将是&#34;我的完整字符串&#34;。
  • 要在几个.中添加",您必须使用斜杠"..."保护它{/ p>

    pr&#34; \&#34;&#34;

将打印一个\

答案 1 :(得分:1)

如果您已有数据文件,则必须使用

set datafile separator ','

并使用与您的数据匹配的时间格式:

set timefmt '%Y-%m-%d %H:%M:%S'

如果手动设置,xrange也必须与timefmt匹配。或者,为了简单起见,只需使用

即可
set autoscale xfix

严格限制。

您可以使用语法

直接从sqlite进行绘图
plot '< sqlite ...'

你必须将输出从sqlite指向stdout。