Как использовать переменную счетчика и значение последней строки в заголовке ключа - PullRequest
0 голосов
/ 11 марта 2020

Я хочу использовать мою переменную-счетчик, первую и последнюю запись в столбце, которые имеют формат времени "% H:% M:% S" в моем графике в заголовке ключа, я знаю, как использовать переменные в заголовке ключа, но не в формате даты или времени. Также счетчик всегда равен нулю в заголовке ключа. Как я могу оценить это в заголовке после того, как сюжет готов?

c=0
plot 'data.txt' using (c=c+1,$1):3

1 Ответ

1 голос
/ 11 марта 2020

Если я правильно понимаю ваш вопрос, вам нужен ваш счетчик, а также первая и последняя дата в ключе. Один из возможных способов - сделать это за два прохода. Первая команда plot на самом деле ничего не отображает, но получает нужные значения в переменные. Возможно, есть более простые способы сделать это.

Редактировать: вместо изначально $0==0 лучше использовать c==0, особенно когда ваши данные могут иметь одну или несколько пустых строк.

Объяснение:

(c==0 ? Start=timecolumn(1,myTimeFmt) : End=timecolumn(1,myTimeFmt)):(c=c+1,NaN) not

Проверка help operators ternary и help operators binary.

Команда построения в основном циклически повторяет строки данного столбца ( с). Если c равно 0 (что имеет место только в начале l oop), присвойте значение времени столбца 1 переменной Start, иначе присвойте значение времени столбца 1 переменной End. В конце l oop End будет содержаться последнее значение столбца 1. Результатом этого троичного оператора (c==0? a:b) будет в основном значение x для построения графика. Однако значение y равно NaN, поскольку (c=c+1,NaN) является последовательной оценкой, то есть c будет увеличено, но результат будет NaN. NaN не будет отображаться, поэтому первая команда plot ничего не будет выводить. not является аббревиатурой для notitle, т.е. без ввода ключа. Надеюсь, теперь немного понятнее.

Код:

### get datavalues into the key
reset session

$Data <<EOD
16:01:00   1.2   1.3
16:16:00   2.2   2.3
16:31:00   3.2   3.3
16:46:00   4.2   4.3
17:01:00   5.2   5.3
17:16:00   6.2   6.3
17:31:00   7.2   7.3
EOD

myTimeFmt = "%H:%M:%S"
set format x "%H:%M" time
set key top left
c=0

plot $Data u (c==0?Start=timecolumn(1,myTimeFmt):End=timecolumn(1,myTimeFmt)):(c=c+1,NaN) not, \
     $Data u (timecolumn(1,myTimeFmt)):3 w lp pt 7 \
     title sprintf("Count %d: ",c)." from ".strftime(myTimeFmt,Start)." to ".strftime(myTimeFmt,End)
### end of code

Результат:

enter image description here

Добавление: (отсчет по оси X и время по оси Y, расчет продолжительности)

Код:

### get datavalues into the key
reset session

$Data <<EOD
16:01:00   1.2   1.3
16:16:00   2.2   2.3
16:31:00   3.2   3.3
16:46:00   4.2   4.3
17:01:00   5.2   5.3
17:16:00   6.2   6.3
17:31:00   7.2   7.3
EOD

myTimeFmt = "%H:%M:%S"
set format y "%H:%M" time
set key at graph 0.5, 0.9
set offsets graph 0.05, graph 0.05, graph 0.05, graph 0.05
c=0

plot $Data u (c=c+1,NaN):(c==1?Start=timecolumn(1,myTimeFmt):End=timecolumn(1,myTimeFmt)) notitle, \
     $Data u ($0+1):(timecolumn(1,myTimeFmt)) w lp pt 7 \
      title sprintf("Counts %d",c)."\n from ".strftime(myTimeFmt,Start)." to ".strftime(myTimeFmt,End)."\nDuration: ".strftime("%tH:%M",End-Start)
### end of code

Результат:

enter image description here

...