来自sqlite3的数据的gnuplot(使用多列)

时间:2014-11-12 08:58:31

标签: sqlite gnuplot

我遇到了以下问题: 我有一个带有以下列的sqlite3数据库: ID,tempin,tempout,湿度,时间,日期

现在我想使用gnuplot将所有内容绘制成一个漂亮的情节。 我搜索了一下,发现了以下代码:

plot '< sqlite3 myfile.db3 "SELECT temp1, temp2, pressure, humidity FROM myTable;"' using 0:1 title 'temp1', \
     '' using 0:2 title 'temp2'

但在编辑之后,gnuplot说“警告:跳过没有有效点的数据文件”

我的数据库看起来像:

ID    tempin      tempout     humidity     date         time
1     24          12          55           01.11.2014   07:00
2     23          13          54           01.11.2014   07:15
3     25          13          45           01.11.2014   07:30

有没有人知道为什么我不能将数据库绘制成gnuplot? 此外,我想使用x scale的列日期或时间。

2 个答案:

答案 0 :(得分:0)

您的代码有两个问题:

  1. gnuplot代码中的列名与 数据库
  2. sqlite3默认使用<img src="test">作为数据列之间的分隔符,但是gnuplot默认需要空格

为重现您的问题,我输入了sqlite3

|

然后尝试查询

create table myTable ( id int, tempin int, tempout int, humidity int, date date, time time );
insert into myTable values ( 1, 24, 12, 55, "01.11.2014", "07:00" );
insert into myTable values ( 2, 23, 13, 54, "01.11.2014", "07:15" );
insert into myTable values ( 3, 25, 13, 45, "01.11.2014", "07:30" );

得到

select temp1, temp2, pressure, humidity from myTable;

然后我尝试了

Error: no such column: temp1

得到

select * from myTable;

因此,我为您的数据库提供的gnuplot代码建议是

1|24|12|55|01.11.2014|07:00
2|23|13|54|01.11.2014|07:15
3|25|13|45|01.11.2014|07:30

答案 1 :(得分:-2)

直接在单词plot后面,一个来源,例如需要一个文件名,而不是数据本身。但是,您可以使用特殊文件名&#34; - &#34;并且gnuplot会要求您手动输入表格。它看起来像这样:

gnuplot> plot "-" u 1:2 w l
input data ('e' ends) > 
ID    tempin      tempout     humidity     date        time
1     24          12          55           01.11.2014   07:00
2     23          13          54           01.11.2014   07:15
3     25          13          45           01.11.2014   07:30
input data ('e' ends) > e

现在,这取决于你调用gnuplot的方式。从命令行,您可以调用

gnuplot -e "plot '-' u 1:2 w l" <  sqlite3 myfile.db3 ...

我自己不是将数据直接传递给gnuplot的朋友。我更喜欢将它写入文件,首先:

sqlite3 myfile.db3 ... > myDataFile

gnuplot -e "plot 'myDataFile' u 1:2 w l" 

即便如此,我更喜欢编写一个包含gnuplot所有命令的gnuplot脚本。随着设置数量的增加,单个命令行变得更长且可读性更低。