我有一个包含2列X和Y数据的文件。有一些块,它们用空行分隔。我想使用向量在每个块中加入点(由文件中的coordenates x和y给出)。我试图使用这些功能:
prev_x = NaN
prev_y = NaN
dx(x) = (x_delta = x-prev_x, prev_x = ($0 > 0 ? x : 1/0), x_delta)
dy(y) = (y_delta = y-prev_y, prev_y = ($0 > 0 ? y : 1/0), y_delta)
我从Plot lines and vector in graphical gnuplot(第一个回答)中摘取。绘图命令为plot for[i=0:5] 'Field_lines.txt' every :::i::i u (prev_x):(prev_y):(dx($1)):(dy($2)) with vectors
。输出是
问题是即使它不在文件中,也会包含点(0,0)。我不认为我理解dx
和dy
函数的确切含义以及它们如何与(prev_x):(prev_y):(dx($1)):(dy($2))
选项一起使用,因此对此的解释会对我有所帮助试图解决这个问题。
这是文件:
#1
0 5
0 4
0 3
0.4 2
0.8 1
0.8 1
#2
2 5
2 4
2 3
2 2
2 1
2 0
#3
4 5
4.2 4
4.5 3
4.6 2
4.7 1
4.7 0
#4
7 5
7.2 4
7.5 3
7.9 2
7.9 1
7.9 0
#5
9 5
9 4
9.2 3
9.5 2
9.5 1
9.5 0
#6
11 7
12 6
13 5
13.3 4
13.5 3
13.5 2
13.6 1
14 0
谢谢!
答案 0 :(得分:1)
我不完全确定,真正的问题是什么,但我认为你不能依赖using
语句中的列从左到右进行评估,而你的检查$0 > 0
在我认为dx
和dy
为时已晚。
我通常会将所有作业和条件放在第一列中,并且在您的情况下也可以正常工作:
set offsets 1,1,1,1
unset key
prev_x = prev_y = 1
plot for [i=0:5] 'Field_lines.txt' every :::i::i \
u (x_delta = prev_x-$1, prev_x=$1, y_delta=prev_y-$2, prev_y=$2, ($0 == 0 ? 1/0 : prev_x)):(prev_y):(x_delta):(y_delta) with vectors backhead
此外,要从第j行绘制向量到下一行中的点,您必须反转x_delta
的定义并使用backhead
以正确的方向绘制向量