Подтвердить что ты не робот

Gnuplot условное построение: plot col A: col B, если col C == x

Как это сделать в gnuplot:

plot "test.csv" using 1:2 if value_in_column_3 == 80.0

Он должен выбирать только те строки, где столбец 3 == 80.0, и игнорировать все остальные строки (он не должен отображать 0 для других строк, просто игнорируйте их)

Спасибо заранее.

4b9b3361

Ответ 1

Рассмотрим следующий набор данных (1.dat),

1 0.8 0
2 0.6 0
3 0.9 1
4 1.1 0
5 0.7 0
6 0.6 1

где мы хотим построить первые два столбца только тогда, когда третий равен нулю. Затем вы можете попробовать следующее:

plot '1.dat' using 1:($3==0?$2:1/0)

(кредит markjoe в списке рассылки Gnuplot.)

Ответ 2

Случай, когда требуется условно построить сюжет, содержащий текст:

данные

1 0.8 a
2 0.6 a
3 0.9 a
1 2.1 b
2 1.7 b
3 1.6 b

код

set terminal postscript color
set xrange [0:4]
set yrange [0:3]
plot "1.dat" using 1:(stringcolumn(3) eq "a"? $2:1/0) title "a" lc rgb "blue" ,\
  "" using 1:(stringcolumn(3) eq "b"? $2:1/0) title "b" lc rgb "red"

Команда

gnuplot < 1.par > 1.ps

Ответ 3

Как сказано выше в chl, единственный способ сделать это в gnuplot довольно хакен: вам нужно использовать оператор gnuplot terniary?: для генерации числовой ошибки в точках, которые вы хотите отфильтровать из своего набора данных.

Я могу быть предвзятым здесь, поскольку я автор проекта, но вы можете посмотреть на Pyxplot http://www.pyxplot.org.uk (также бесплатно и открывать источник), написанный группой пользователей gnuplot, которым было немного доволен хакерским синтаксисом, подобным этому.

Его синтаксис очень похож на gnuplot, но с расширениями. Для чего вы хотите указать "select criterion" в команде plot, и точки включаются только в том случае, если он проверяет True. Подробнее см. http://pyxplot.org.uk/current/doc/html/sec-select_modifier.html.

Ответ 4

Другим взломом будет использование команды оболочки, например awk:

plot "< awk '$3==80.0 { print $1, $2 }' test.csv" using 1:2

Ответ 5

Если вы вызываете script, используйте column(2) вместо $2

plot "1.dat" using 1:(stringcolumn(3) eq "a"? column(2):1/0) title "a" lc rgb "blue" ,\
  "" using 1:(stringcolumn(3) eq "b"? column(2):1/0) title "b" lc rgb "red"