【发布时间】:2021-02-24 11:25:15
【问题描述】:
我可以使用来自 sqlite 数据库的 gnuplot 直接绘制时间序列数据集吗?
我有一个 sqlite 数据库,我想绘制时间序列数据。我创建了查询。真的很简单,它正在工作。这是 sqlite3 查询,并发送到文件:
$ sqlite3 ./home_temp.db "SELECT datetime(datetime_int,'unixepoch'), ROUND(temperature, 2) FROM bme280_data ORDER BY datetime_int DESC LIMIT 288;" >> home_temp.dat
这是 home_temp.dat 文件中的几行:
2020-10-12 13:20:01|21.02
2020-10-12 13:15:02|20.95
2020-10-12 13:10:01|20.89
2020-10-12 13:05:01|20.8
2020-10-12 13:00:01|20.74
2020-10-12 12:55:02|20.87
我可以用 gnuplot 阅读并绘制它。没关系。
#! /usr/bin/env gnuplot
set terminal dumb 150 25
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M"
set xtics rotate by -90
set datafile separator "|"
plot "<(sqlite3 ./home_temp.db 'SELECT datetime(datetime_int,'unixepoch'), ROUND(temperature, 2) FROM bme280_data ORDER BY datetime_int DESC LIMIT 288;')" using 1:2 with lines
plot './home_temp.dat' using 1:2 with lines
pause -1
现在,当我将这个 gnuplot 文件更改为从 sqlitedb 而不是从文件中读取时。它不再工作了。有人知道为什么吗?
#! /usr/bin/env gnuplot
set terminal dumb 150 25
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set format x "%H:%M"
set xtics rotate by -90
set datafile separator "|"
SqliteField(f) = '< sqlite3 ./home_temp.db "SELECT '.f.' FROM bme280_data ORDER BY datetime_int DESC LIMIT 288;"'
fields = "datetime(datetime_int,'unixepoch'), ROUND(temperature, 2)"
plot for [f in fields] SqliteField(f) using 1:2 with lines
错误信息:x range is invalid
有什么问题?
【问题讨论】:
标签: bash sqlite plot time-series gnuplot