GnuPlot: несколько графиков по первому значению - PullRequest
0 голосов
/ 20 июня 2020

Я новичок в GnuPlot и считаю его немного запутанным. У меня есть такие данные:

sensor1 timestamp   temperature
sensor1 timestamp   temperature
sensor1 timestamp   temperature
sensor2 timestamp   temperature
sensor2 timestamp   temperature
sensor2 timestamp   temperature
sensor3 timestamp   temperature
sensor3 timestamp   temperature

Я использую следующее только для одного датчика, который дает ожидаемый результат.

plot 'sensors.txt' using 2:($3/100.0):1 with lines

Я хочу нарисовать график для каждый датчик использует первое значение в качестве заголовка графика. Это не похоже на сложную проблему, но я не мог понять ее, кроме как разбить данные на один файл для каждого датчика. Есть ли более элегантное решение?

1 Ответ

1 голос
/ 21 июня 2020

Решением этой проблемы является фильтрация по ключевым словам с помощью тернарного оператора (см. help ternary).

Вы не показываете примерные данные, поэтому я предполагаю что-то.

Код:

### split data by keyword for each plot
reset session

$Data <<EOD
sensor1  2020-06-21 12:00  24.3
sensor1  2020-06-21 13:00  25.3
sensor1  2020-06-21 14:00  22.3
sensor2  2020-06-21 15:00  23.3
sensor2  2020-06-21 16:00  22.3
sensor2  2020-06-21 17:00  21.3
sensor3  2020-06-21 18:00  25.3
sensor3  2020-06-21 19:00  23.3
sensor3  2020-06-21 20:00  27.3
EOD

myTimeFmt = "%Y-%m-%d %H-%M"
myFilter(fcol,key,dcol) = strcol(fcol) eq key ? column(dcol) : NaN
set datafile missing NaN
set format x "%Y\n%m-%d\n%H:%M" time
set xtics font ",8"
set ytics 1

set multiplot layout 3,1
    do for [i=1:3] {
        myKey = sprintf("sensor%d",i)
        set title myKey
        plot $Data u (timecolumn(2,myTimeFmt)):(myFilter(1,myKey,4)) w lp pt 7 lc i title myKey
    }
unset multiplot
### end of code

Результат:

введите описание изображения здесь

...