gnuplot два условия в одной тройке

Есть таблица, состоящая из четырех столбцов, например

0.1   0.2   2   5
0.3   0.5   3   7 
0.2   0.9   4   8

0.5   0.2   5   5 

0.3   0.1   2   10

0.8   0.7   2   4

Как видите, есть пустые строки. Я хочу сделать график для этой таблицы, но у меня есть два условия. Во-первых, столбцы 3 и 4 отображаются только в том случае, если оба столбца 1 и 2 меньше 0,4, поэтому в этом случае следует отображать только 1-ю и 7-ю строки. Во-вторых, пустые строки следует игнорировать.

Легко, мой график не должен показывать мне строки без значений, что означает, что строки 4, 6 и 7 не должны отображаться на графике. Кроме того, должно выполняться первое условие.

поэтому я напечатал так,

reset
plot 'table.txt' u ($1 < 0.4 || $1 == 1/0 ? $3 : 1/0):($2 < 0.4 || $2 == 1/0 ? $4 : 1/0) pt 7 ps 0.5

но я не мог получить то, что хотел. Только две точки, строки 1 и 7, должны были появиться, но эти пустые строки также были нанесены на график. Это || (Я использовал это как значение «и») неправильно?


person snam    schedule 07.02.2019    source источник
comment
|| соответствует логическому OR, && соответствует логическому AND. Проверьте help operators binary, есть список.   -  person theozh    schedule 07.02.2019


Ответы (1)


Пустые строки в любом случае не отображаются. Итак, используйте свой тернарный оператор, чтобы проверить, является ли $1<0.4 && $2<0.4. Если это так, поместите текущее значение $4 в y0 и $3 в x0.... и постройте x0 и y0. Если вы хотите иметь подключенные линии, например. with linespoints вам, возможно, потребуется предпринять дополнительные действия.

### filter data values
reset session

$Data <<EOD
0.1   0.2   2   5
0.3   0.5   3   7 
0.2   0.9   4   8

0.5   0.2   5   5 

0.3   0.1   2   10

0.8   0.7   2   4
EOD

x0 = y0 = NaN
plot $Data u ($1<0.4 && $2<0.4 ? (y0=$4, x0=$3) : NaN):(y0) w p pt 7 ps 2
### end of code
person theozh    schedule 07.02.2019