我有一个远程数据采集系统将站点温度记录到远程系统上的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来直接查询数据库,那就更好了。
答案 0 :(得分:2)
您可以在 gnuplot脚本中执行命令调用
(请参阅 gnuplot 中的help shell
和help 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]
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。