关于gnuplot的快速问题。 我有两张图,从文件中绘制,如下:
plot "t2" using 1:75 with linespoints title "crop 20",\
"t2" using 1:11 with linespoints title "crop 30"
现在我想识别两个图上的点,如果它们具有相同的高度,例如Y坐标。 它可能是一种不同的颜色,或者完美的解决方案是在它们之间画一条线。
有什么想法吗? 非常感谢。
修改
感谢Sunhwan Jo的回复,方法建议工作正常,只要相同的值以相同的顺序出现。看图像
两个图表在相同的高度上共享多个点,但由于长度不同而未被拾取。
答案 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'
结果情节:
答案 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。