如何根据测试条件在文件和y坐标中使用x坐标绘制gnuplot中的点?

时间:2015-04-21 13:34:21

标签: awk plot gnuplot

我有一个包含3列数据的文件。第一列包含x坐标,第三列包含y坐标。第二列包含值(例如,假设它具有来自集合{0, 1, 2}的值),具体取决于哪个,确定绘制点的颜色和类型。我使用以下命令进行绘图:

plot "< awk '{if($2 == \"0\") print}' out.txt" using 1:3 title "Label 0" with points pointtype 1 lc rgb '#990000'  
     "< awk '{if($2 == \"1\") print}' out.txt" using 1:3 title "Label 1" with points pointtype 2 lc rgb '#990055'  
     "< awk '{if($2 == \"2\") print}' out.txt" using 1:3 title "Label 2" with points pointtype 3 lc rgb '#990099'

这很好用。但是现在,我希望实现以下目标:

  • 如果对于某一行,我的文件中的(1st column, 3rd column)对应(xi, yi),那么根据yi的值,我希望在(xi, Yi)处绘制一个点

有人可以帮我吗?谢谢。
PS:我是gnuplot的初学者。我不确定这是一个非常简单的问题。 提前致谢。

以下是样本数据和我的期望的一个例子。

Sample Data:                                  Expected point:

0 0 34                                        (0, 30) Red   
0 1 10                                        (0, 10) Green  
0 2 44                                        (0, 40) Blue
1 0 50                                        (1, 50) Red
1 1 49                                        (1, 50) Green
1 2 48                                        (1, 50) Blue
2 0 46                                        (2, 50) Red
2 1 49                                        (2, 50) Green
2 2 46                                        (2, 50) Blue
3 0 45                                        (3, 50) Red
3 1 46                                        (3, 50) Green
3 2 48                                        (3, 50) Blue
4 0 68                                        (4, 70) Red
4 1 44                                        (4, 40) Green
4 2 46                                        (4, 50) Blue
5 0 43                                        (5, 40) Red
5 1 44                                        (5, 40) Green
5 2 44                                        (5, 40) Blue
6 0 43                                        (6, 40) Red
6 1 42                                        (6, 40) Green
6 2 46                                        (6, 50) Blue

1 个答案:

答案 0 :(得分:3)

首先,我不认为您需要在当前代码中使用awk。在gnuplot中跳过行的常见技巧是使用这样的三元运算符:

plot 'out.txt' using ($2 == 0 ? $1 : 1/0):3 title "Label 0" with points pointtype 1 lc rgb '#990000'

x坐标设置为1/0(即inf),除非第二列中的值为0,这意味着跳过了数据点。< / p>

如果要为给定的y对绘制完全不同的(x, y)坐标,可以使用以下内容:

x = 4
y = 2
Y = 10
plot 'out.txt' using ($2 == 0 ? $1 : 1/0):($1 == x && $3 == y ? Y : $3) title "Label 0" with points pointtype 1 lc rgb '#990000'

如前所述,当第二列与所需值不匹配时,将跳过该行。我还添加了一个条件,当第一列和第三列与变量xy匹配时,使用Y的值而不是第三列。

要根据y的当前值执行计算,您可以使用函数f(y)而不是变量Y。例如,要舍入到最接近的值10,您可以声明此函数:

f(y) = round(y / 10) * 10

然后将Y替换为f($3)

另外,awk程序的结构为condition { action },默认操作为{ print },因此如果您要使用awk,则可以简化为awk '$2 == 0'(它&# 39; s也没有必要引用0)。