从日期和时间与温度的sqlite数据库获取数据的gnuplot?

从日期和时间与温度的sqlite数据库获取数据的gnuplot?,sqlite,raspberry-pi,gnuplot,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", "1

我有一个远程数据采集系统,将现场温度记录到远程系统上的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编程获取最后48个文件数据,并生成48小时数据x=datetime vs y=temperature的x/y线图的图形文件,以包含在已生成的html文档中,并返回到本地系统

这是我目前的尝试,尽管我确信我在几个地方有不同的目的,因为这主要是一个剪切粘贴/在黑暗中摸索的创作:

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脚本直接查询数据库的方法,那就更好了。

您可以在gnuplot脚本中执行命令调用。 请参阅gnuplot中的帮助shell和帮助命令

因此,您可以要求您的系统从类似于的行生成输出文件last48.csv

! sqlite3 -header -csv my_db.db "select * from my_table;" > last48.csv
当然不是选择*,而是我的表格等等。。。您将使用手动生成csv文件的命令

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

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

如果您有一个超过48小时的“csv”文件,并且在打印生成时,例如2015-11-12的16:00,您可以使用以下命令快速选择xrange

设置X范围['2015-01-10 16:00':'2015-01-12 16:00']

如果您在Linux下运行gnuplot,您可以参考man date以获得有关如何格式化当前日期的提示 gnuplot的最新版本允许使用运算符连接不同的字符串。。例如,如果A=My,B=full,C=string,那么D=A.B.C将是我的完整字符串。 要在两个。。。您必须用斜杠保护它\so

公关部


将打印单个

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

set datafile separator ','
并使用与您的数据相匹配的时间格式:

set timefmt '%Y-%m-%d %H:%M:%S'
如果手动设置,则xrange还必须与timefmt匹配。或者,为了使事情变得简单,只需使用

set autoscale xfix
有严格的限制

您可以使用以下语法直接从sqlite打印

plot '< sqlite ...'

您是否必须将输出从sqlite定向到标准输出。

在哪个操作系统下运行gnuplot?我正在raspberry piThanks上的linux上运行gnuplot。我会试试你的建议。默认情况下,gnuplot似乎不喜欢我的数据文件的格式。有没有办法告诉它忽略引号并使用逗号而不是空格分隔列?正如刚才建议的那样,您可以添加“设置数据文件分隔符”,并设置时间“%Y-%m-%d%H:%m:%S”。您不能简单地删除,因为在x列中有一些空格。。。当然,你可以用一些复杂的方法来克服它。。。。但是,在设置timemt之后,问题不应该出现。可能是您必须在时间格式中包含引号:set timemt“%Y-%m-%d%H:%m:%S”。抱歉,目前无法测试,但我记得关于这一点的一个问题:我想有一点打印错误,数据文件应该是一个单词。。。至少在gnuplot 4.6中