gnuplot: как соотнести точки на двух графиках - PullRequest
0 голосов
/ 30 августа 2011

Быстрый вопрос о гнуплоте.У меня есть два графика, построенных из файла, например:

plot "t2" using 1:75 with linespoints title "crop 20",\
"t2" using 1:11 with linespoints title "crop 30"

Теперь я хочу определить точки на обоих графиках, если они имеют одинаковую высоту, например, координату Y.Это может быть другой цвет, или идеальным решением будет провести черту между ними.

Есть идеи?Большое спасибо.

РЕДАКТИРОВАТЬ

Спасибо за ответ Sunhwan Jo, предложенный метод работает хорошо, если похожие значения отображаются в том же порядке.См. Изображение enter image description here

Два графика имеют несколько общих точек на одной и той же высоте, но они не обнаружены из-за разницы в длине.

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Предыдущий ответ с использованием сценария awk для предварительной обработки данных является хорошим методом.Здесь я приведу метод, использующий только gnuplot.Есть троичный оператор-- "?:".С помощью этого оператора вы можете выбрать точки с одинаковым значением.Например, "plot" data.dat 'u 1: ($ 11 == $ 75? $ 11: 1/0) wp lc rgb'blue' "построит только точки с $ 11 == $ 75.Я написал подробности в своем блоге.Если у вас есть какие-либо вопросы, посетите http://gnuplot -surprising.blogspot.com / 2011/09 / манипулировать-data-using-ternary-operator.html .

enter image description here

1 голос
/ 30 августа 2011

Вы можете использовать внешнюю программу для фильтрации точек данных с одинаковыми данными в двух разных столбцах (здесь я проверял, есть ли в 75-м и 11-м столбцах одинаковые записи).

plot "t2" using 1:75 with linespoints title "crop 20",\
     "t2" using 1:11 with linespoints title "crop 30",\
     "< awk '{if ($75==$11) print $0}' t2" us 1:11 with lines points title "crop 20/30"

EDIT:

Хорошо, выше не будет работать, если вы хотите показать точки данных, которые имеют одинаковые данные в разных строках. Скрипт AWK будет более проработан. Я пробовал, как показано ниже, надеюсь, это поможет.

Вот тестовые данные.

0      0.0      0.0
1      0.3      0.6
2      1.6      1.6
3      0.3      1.5
4      0.6      3.6
5      0.3      4.3
6      0.3      0.7
7      5.5      5.5
8      6.6      6.6
9      5.2      5.2
10     8.3      8.3
11     2.7      5.0
12     2.8      8.3
13     3.3      2.8
14     7.9      3.9
15     9.9      7.9
16    15.3     15.3
17    14.7     14.7
18     3.8     18.1
19    18.1     12.1

И команда gnuplot (обратите внимание на очевидную разницу в обозначении столбцов):

plot 'test.dat' us 1:2 w lp title "1", \
     'test.dat" us 1:3 w lp title "2", \
     "< awk '{ind[NR]=$1; arr1[NR]=$2; arr2[NR]=$3} END{for (i=1; i<=NR; i++) {for (j=1; j<=NR; j++) {if (arr1[i]==arr2[j]) print ind[i], arr1[i]}}}' test.dat' test.dat" us 1:2 w lp title '1==2'

Итоговый участок:

enter image description here

...