线内线绘图?

时间:2014-10-27 21:26:49

标签: plot gnuplot

这里有点棘手的情况。基本上,我有大约6个x,y,z点的文件(每个点有200个点),它们都是相互关联的。我要做的是制作这个数据的3D(splot),我已经可以做了,只有相应行之间的线 - 所以文件1中的第34行在文件2中的第34行,依此类推

我可以说我可能不会在这里解释得最好,所以我会试着给出一些背景信息。它是一个模拟程序,它计算粒子的位置,然后对它们施加不同的力。在模拟的每一秒之后,它输出一个文件,因此它将用线条绘制这些粒子在3D中的路径。

为了解决这个问题,我已经考虑过为每个粒子提供自己的文件,但是每次加载每个文件(splot'file.csv'等)时,每次这都会很慢 - 并且会增加文件IO需要。任何帮助都将非常感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

使用with vectors绘图样式和paste命令实际上相对容易。想象一下,你有以下四个文件:

# File 1 named data1
0 0 0
1 1 1

# File 2 named data2
1 0 0
1 2 2

# File 3 named data3
1 1 0
1 3 2

# File 4 named data4
1 0 2
2 1 2

粒子1将遵循轨迹0 0 0 -> 1 0 0 -> 1 1 0 -> 1 0 2,粒子2将遵循轨迹1 1 1 -> 1 2 2 -> 1 3 2 -> 2 1 2

with vectors样式连接两个点,您需要在3D中需要6个数据点,这些点需要位于同一个文件中。这可以使用paste命令来实现:

paste data1 data2 > data1-2

导致文件data1-2看起来像这样:

# File 1 named data1    # File 2 named data2
0 0 0   1 0 0
1 1 1   1 2 2

但这只是为了解释发生了什么。这在gnuplot中做得更好,i迭代文件,j迭代粒子(j = 0是第一个粒子):

nfiles = 4 # number of files
nparticles = 2 # number of particles

splot for [i=1:1] for [j=0:nparticles-1] "< paste data".i." data".(i+1) \
u 1:2:3:($4-$1):($5-$2):($6-$3) every ::j::j w vectors lc j+1 t "Particle ".(j+1), \
for [i=2:nfiles-1] for [j=0:nparticles-1] "< paste data".i." data".(i+1) \
u 1:2:3:($4-$1):($5-$2):($6-$3) every ::j::j w vectors lc j+1 not

钽DAH!

enter image description here