这里有点棘手的情况。基本上,我有大约6个x,y,z点的文件(每个点有200个点),它们都是相互关联的。我要做的是制作这个数据的3D(splot),我已经可以做了,只有相应行之间的线 - 所以文件1中的第34行在文件2中的第34行,依此类推
我可以说我可能不会在这里解释得最好,所以我会试着给出一些背景信息。它是一个模拟程序,它计算粒子的位置,然后对它们施加不同的力。在模拟的每一秒之后,它输出一个文件,因此它将用线条绘制这些粒子在3D中的路径。
为了解决这个问题,我已经考虑过为每个粒子提供自己的文件,但是每次加载每个文件(splot'file.csv'等)时,每次这都会很慢 - 并且会增加文件IO需要。任何帮助都将非常感激。
谢谢!
答案 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!