GnuPlot - Múltiplas séries temporais em dados, plotando linhas separadas

1

Eu tenho um banco de dados SQLite3 que contém dados semelhantes aos seguintes

time_index      Circuit         dateTimeRecorded                activepower
404503          GPOs            2018-05-30 00:03:50             224.57
404503          Grid            2018-05-30 00:03:50             4.34
404503          Shed            2018-05-30 00:03:50             24.86
404504          GPOs            2018-05-30 00:08:51             223.89
404504          Grid            2018-05-30 00:08:51             5.69
404504          Shed            2018-05-30 00:08:51             25.25
404505          GPOs            2018-05-30 00:13:52             247.23
404505          Grid            2018-05-30 00:13:52             3.81
404505          Shed            2018-05-30 00:13:52             24.43
404506          GPOs            2018-05-30 00:18:52             223.19
404506          Grid            2018-05-30 00:18:52             4.58
404506          Shed            2018-05-30 00:18:52             25.11
404507          GPOs            2018-05-30 00:23:52             222.57
404507          Grid            2018-05-30 00:23:52             4.01
404507          Shed            2018-05-30 00:23:52             24.86

Eu consegui obter um gráfico, mas todos os 3 circuitos se combinam em uma linha. Eu acho que preciso de alguma forma filtrar e plotar 3 vezes.

O problema é que os dados são verticais, não horizontais.

Eu considerei a parametrização de uma cláusula where no SQL, mas não consegui descobrir como fazer isso usando a linha de comando sqlite3.

Acho que posso ter 3 arquivos SQL separados, mas acho isso um pouco feio.

O progresso até agora é o seguinte ...

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
show xrange
set format x "%H:00"
#set datafile separator "   "
#set key autotitle columnhead
#
# Currently plotting all 3 sensors, working on how to plot for each sensor.
#
plot '< sqlite3 /tmp/usb_database.db ".read PlotElectricityUsage.sql"'  \
    using 3:5 \
    with lines \
    title "Electricity Usage"

pause -1 "Hit return to continue"

Onde o arquivo SQL é o seguinte

.header on
.separator "    "
SELECT "DATA"."time_index",
       Case   
          When EUI64 = '000D6F0005A5BE9D' then 'Grid'
          When EUI64 = '000D6F0005A5D77E' then 'GPOs'
          When EUI64 = '000D6F0005A5BCAE' then 'Shed'
          Else '????'
       End as "Circuit",
       datetime("DATA"."TimeStamp", 'unixepoch', 'localtime') as "dateTimeRecorded",
       "DATA"."activepower"
FROM "DATA" 
WHERE "DATA"."devicetype" = 15 
   AND "DATA"."voltage" > 0 
   AND "dateTimeRecorded" BETWEEN date('now', 'start of day') 
                                    AND date('now', 'start of day', '+1 day') 
   AND "dateTimeRecorded" > Datetime('2018-03-09 13:00:00')
 ORDER BY "Circuit",
      "DATA"."time_index" ASC
;

Qualquer ajuda seria muito apreciada.

    
por Lyall Pearce 31.05.2018 / 12:07

1 resposta

0

Use awk :

plot '< awk ''$2=="GPOs"'' /tmp/usb_database.db' u 1:5 w lp
    
por 11.07.2018 / 17:26

Tags