2-й вывод 3d-данных не по номеру блока, а по значению столбца - PullRequest
0 голосов
/ 18 июня 2019

У меня есть некоторые трехмерные данные, например, так:

0.0  1. 2.
0.0  2. 7.
0.0  3. 1.1

0.1  1. 8.
0.1  2. 5.
0.1  3. 1.

0.2  1. 6.
0.2  2. 3.
0.2  3. 4.

Первая строка - это ось "t" (время), второй столбец - "x", а третья - фактическое значение моей переменной.Конечно, вышеприведенное схематично.

Теперь я хотел бы построить только блок с «временем» t = 0,2.С учетом вышесказанного я мог просто посмотреть и увидеть, какому номеру блока это соответствует, и я мог бы просто использовать every :::2::2 в этом случае.Проблема в том, что мой настоящий файл содержит десятки тысяч строк, составляющих несколько тысяч блоков.Если я хочу построить только блок, соответствующий определенному времени, было бы очень утомительно подсчитывать, какому блоку соответствует определенное время.Таким образом, есть ли у меня способ дать gnuplot какое «время» (первый столбец, как в приведенном выше примере), я бы хотел, чтобы он построил соответствующий блок;а gnuplot внутренне выясняет связанный блок?Вы можете предположить, что я знаю точное время, хотя, оптимально, я хотел бы дать gnuplot время t, тогда gnuplot ищет первый столбец файла и выводит блок, время которого ближе всего к данному времени t.

1 Ответ

1 голос
/ 18 июня 2019

Просто используйте троичный оператор в качестве фильтра:

($1==0.2 ? $2 : NaN)

в словах: если первый столбец равен 0,2, примите значение второго столбца как значение x,в противном случае возьмите NaN (который не будет нанесен на график).

Код:

### filter data
reset session

$Data <<EOD
0.0  1. 2.
0.0  2. 7.
0.0  3. 1.1

0.1  1. 8.
0.1  2. 5.
0.1  3. 1.

0.2  1. 6.
0.2  2. 3.
0.2  3. 4.

0.3  2. 3.
0.3  1. 2.
0.3  4. 5.
EOD

plot $Data u ($1==0.2 ? $2 : NaN) : 3 w lp pt 7 lc rgb "red"
### end of code

Результат:

enter image description here

...