gnuplot:如何关联两个图上的点

时间:2011-08-29 20:38:06

标签: gnuplot

关于gnuplot的快速问题。 我有两张图,从文件中绘制,如下:

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 个答案:

答案 0 :(得分:1)

您可以使用外部程序过滤掉两个不同列中具有相同数据的数据点(此处我已检查过第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"

编辑:

好的,如果要显示不同行中具有相同数据的数据点,则上述操作无效。 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

答案 1 :(得分:1)

使用awk脚本预处理数据的上一个答案是一个很好的方法。这里我给出一个仅使用gnuplot的方法。有一个三元运算符 - “?:”。使用此运算符,您可以选择具有相同值的点。例如,“plot'atata.dat'u 1:($ 11 == $ 75?$ 11:1/0)w p lc rgb'blue'”将只绘制$ 11 == $ 75的积分。我在博客中写了详细信息。如果有任何问题,请访问http://gnuplot-surprising.blogspot.com/2011/09/manipulate-data-using-ternary-operator.html

enter image description here